【问题标题】:Vue,Js : Conditional search filterVue,Js:条件搜索过滤器
【发布时间】:2018-06-22 17:09:43
【问题描述】:

场景: 从下拉列表中选择一个表格列,然后选择< | > | = | >= | <=等条件,然后在搜索框中输入值。

column, condition, search input:

// Select column name
<select class="dv-header-select" v-model="query.search_column">
    <option v-for="column in columns" :value="column">{{column}}</option>
</select>

// Select condition(<,>,<=,>=) 
<select class="dv-header-select" v-model="query.search_operator">
    <option v-for="(value, key) in operators" :value="key">{{value}}</option>
</select>

// Search value
<input type="text" class="dv-header-input" placeholder="Search"
    v-model="query.search_input">

表格行:

<tr v-for="row in filteredRow">
    <td v-for="(value, key) in row">{{value}}</td>
</tr>

Js:

export default {



    data() {
        return {
        model: { data: [] },
        columns: {},
        query: {
            search_column: 'id',
            search_operator: 'equal',
            search_input: ''
        }
    },


    computed: {
      filteredRow: function(){

        // Values of column, condition, search string (E.g age > 20)
        console.log(this.query.search_column);
        console.log(this.query.search_operator);
        console.log(this.query.search_input);

        return this.model.data.filter((row) => {
        for(var key in row){
            if(String(row[key]).indexOf(this.query.search_input) !== -1){
              return true;
            }
          }
        });
      }
    }
  }

如何搜索表格?试过了,但似乎没有任何效果。

【问题讨论】:

    标签: javascript arrays object search vue.js


    【解决方案1】:

    大致上是这样的:

    var test = {
      computed: {
        filteredRow: function() {
          return this.model.data.filter(row => {
            var value = row[this.query.search_column];
            switch (this.query.search_operator) {
              case "=": return value == this.query.search_input;
              case ">": return value > this.query.search_input;
              // ...
            }
          });
        }
      }
    };
    
    var vm = {
      model: {data: [{a: 1}, {a: 2}] },
      query: {search_column: "a", search_operator: ">", search_input: 1 }
    };
    
    console.log(test.computed.filteredRow.call(vm));

    缺少:类型检查、类型转换、其他运算符、输入卫生。

    【讨论】:

    • 谢谢,它给了我一个例外Error in render function: "TypeError: Cannot read property 'data' of undefined"
    • 我的错,再试一次。
    • 异常消失了但是表是空的,实际上&lt;tr&gt;v-for,它在filteredRow上。更新了问题。谢谢
    • 这就是我说“沿线”的原因。我没有为您的功能提供替代品。我提供了一个功能,可以满足您的需求(即“使用用户可选择的运算符通过用户可选择的属性过滤对象数组” - 如果我在这里错了,请纠正我)。您需要根据自己的情况进行调整。
    猜你喜欢
    • 1970-01-01
    • 2021-07-29
    • 2021-11-08
    • 2019-03-03
    • 2021-03-23
    • 2019-05-25
    • 2017-04-28
    • 1970-01-01
    • 2020-10-07
    相关资源
    最近更新 更多