【问题标题】:VueJS dynamic inputs avoid duplicatesVueJS 动态输入避免重复
【发布时间】:2021-11-11 11:44:16
【问题描述】:

我有一个项目允许用户向警报添加过滤器,避免重复过滤器并让用户为每种类型添加一个过滤器的最佳方法是什么?

<div class="filters_container" v-for="filter in alert.filters">
    <div class="form-group">
        <select class="form-control" v-model="filter.type">
            <option disabled selected value="0">Select</option>
            <option value="price">Price</option>
            <option value="sales">Sales</option>
            <option value="margin" v-if="alert.tool == 'classic'">Margin</option>
            <option value="trend">Trending items</option>
        </select>
    </div>

    <div class="form-group" v-if="filter.type == 'sales'">
        <label>Time frame</label>
        <select class="form-control" v-model="filter.timeFrame">
            <option disabled selected value="0">Select</option>
            <option value="daily">Daily</option>
            <option value="weekly">Weekly</option>
            <option value="monthly">Monthly</option>
            <option value="total">Total</option>
        </select>
    </div>

    <div class="form-group" v-if="filter.type != 'trend'">
        <label>Values</label>
        <div class="form-row">

            <div class="col">
                <input type="text" class="form-control" v-model="filter.min" placeholder="Min">
            </div>
            <div class="col">
                <input type="text" class="form-control" v-model="filter.max" placeholder="Max">
            </div>
        </div>
    </div>
</div>

<button type="submit" class="btn btn-success btn-sm" @click.prevent="addFilter">Add Filter</button>

这是我此刻的添加过滤功能

addFilter: function () {
    this.alert.filters.push(
        {
            temp_id: (Math.floor(Math.random() * 1000)) * (Date.now()),
            type: 'trend',
            timeFrame: 'daily',
            min: null,
            max: null
        }
     )
},

【问题讨论】:

    标签: vue.js vuejs2 vue-component


    【解决方案1】:

    您可以使用以下功能:

    this.alert.filters = this.alert.filters.filter((value, index, self) => 
    {
      return index === self.findIndex(item =>
      {
        return item.type === value.type; // && item.timeFrame === value.timeFrame && item.min === value.min && item.max === value.max;
      });
    });
    

    【讨论】:

    • 我应该如何实现它,在过滤器中添加一个监视以在更改时调用该函数?如果用户决定更改现有对象的类型,会发生什么?我会尝试并报告回来
    • 如果有重复,这取决于你想做什么。如果您尝试添加已经存在的新过滤器 - 您不应该添加它。如果您正在更新现有过滤器,但已经有另一个相同类型的过滤器 - 您应该先删除重复项,然后再继续更新。
    猜你喜欢
    • 2013-09-05
    • 2017-02-12
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    相关资源
    最近更新 更多