【问题标题】:vuejs search filter with 2 v-for带有 2 v-for 的 vuejs 搜索过滤器
【发布时间】:2021-07-14 15:07:07
【问题描述】:

我计算了以下过滤器

<script>
    export default {
        data() {
        return {
           columns:{},
           search:"",
           trovato:{},
        };
        },
        
        
        computed: {

       
           searchit() {

              const sear =this.search.toLowerCase().trim();
              if(!sear) return this.columns;
              Array.from(this.columns).forEach(element => {
                 element.filter((item) => {
    
 
                    if(item.toLowerCase().includes(sear)){
                     
                       this.trovato = item;
                       console.log(this.trovato);
                       return this.trovato;
                    }
                 
                })
             })
           }
    }
</script>

它的工作方式很好,console.log(this.trovato) 打印与我搜索的名称匹配的正确列。

问题是我无法在 v-list 中打印它,一开始它会显示 var 列的所有值{},但在我输入一些内容后它不显示任何内容,它都是空白的.这是我正在使用的代码:

<v-list-item>
   <v-text-field append-icon="search" v-model="search" label="Cerca" ></v-text-field>
</v-list-item>
<v-list v-for="(item,index) in searchit" :key="index">
     <v-list-item v-for="ved in item" :key="ved.id">
         <v-list-item-content>
                                    
               <v-list-item-title >{{ved}}</v-list-item-title>
                                   
                                   
         </v-list-item-content>
     </v-list-item>
</v-list>

【问题讨论】:

    标签: javascript vue.js vuejs2 vuetify.js


    【解决方案1】:

    Array.prototype.filter 返回一个新数组并且不会改变原始数组。 (见documentation

    所以在这里,你过滤它们,但没有将新过滤的数组分配给任何东西,所以它进入了 void。

    另外,将组件 data 从计算的.您应该返回一个从该数据派生的新对象/数组。

    searchit() {
      const sear =this.search.toLowerCase().trim();
    
      if(!sear) { return this.columns; }
    
      const newColumns = this.columns.map(col => {
         return col.filter((item) => {
            if(item.toLowerCase().includes(sear)){
               this.trovato = item; // If possible, avoid setting data from a computed
               return this.trovato;
            }
          })
      })
      return newColumns;
    }
    

    【讨论】:

    • 感谢您的回答,现在可以使用了。感谢您的建议,我删除了“if”并直接输入:“return item.toLowerCase().includes(sear)”,所以我不必从计算中设置数据。
    猜你喜欢
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2019-11-18
    • 2018-04-13
    • 1970-01-01
    • 2019-07-14
    • 2020-09-15
    相关资源
    最近更新 更多