javascript - 在 vue.js 中引用 v-for 中的先前值

标签 javascript vue.js

我有一个用 vue.js 创建的网格,但在应用关键字过滤器后我很难为值获取正确的索引。

<tbody v-for="
      entry in data
    | filterBy filterKey
    | orderBy sortKey sortOrders[sortKey]">
        <tr v-if="$index == 0 || ($index > 0 && entry['value'] != data[$index-1]['value'])">
            <td class="Header" colspan="3">
                    VALUE: @{{{entry["value"]}}}
            </td>
        </tr>
 ...

在这种情况下,{{$index}} 给出 0、1、2、3 等。但是,当应用过滤器时,只有部分数据在屏幕上可见。 (即只有索引 6 和 8 处的条目)不幸的是,$index 仍然从 0 开始递增 1,因此无法引用前一个条目。引用上一个条目的正确方法是什么?

(我想检查条目的某个部分是否与上面的不同,如果是,则创建一个新标题。除了应用关键字过滤器时,我让它工作)

最佳答案

这是我说的jsfiddle

https://jsfiddle.net/sg4jtzzw/

它的要点是

添加了一个计算属性,它封装了对 this.data 的过滤和排序

computed:{
    special: function(){
        var key= this.filt;
        return this.data.filter(function(row){ 
            return row.indexOf(key)!= -1;   
        }).sort(); 
    }
}

在ready函数中,我们初始化了一个$watch来根据special的值更新prev

ready: function(){
  var self = this;
  self.prev= [];
  this.$watch('special',function(newVal, oldVal){
    self.prev = oldVal;  
  });
}

Html部分相当简洁紧凑

<div v-for="item in special">
  <span v-if=" previousList(item)== true"> Old </span>
  {{ item }}
 </div>

注意:filter()sort()都是js函数,不是vue函数,区分大小写。如果我使用 vue 过滤器,代码会不那么冗长,但我不知道如何使用。由于不推荐使用内置过滤器,因此我也不建议使用它们

要了解有关过滤器的推荐方法,您可以阅读 discussion on github

关于javascript - 在 vue.js 中引用 v-for 中的先前值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37264729/

相关文章:

javascript - AngularJS - 如何在使用 $resources 时保留 UI 状态

javascript - Vuetify.js Datepicker - 提供允许日期的数组?

Vue.js SEO 友好

javascript - 加载新的 Turbo Frame 时如何执行 JavaScript

php - 复杂的应用程序堆栈重构/重新设计策略

javascript - 如何过滤数组内的对象?

javascript - 导入Vue破坏Vue

javascript - Json 数组对象访问

vue.js - 将 ref 的内容从子组件传递到另一个 VueJS 子组件

javascript - JS 检查输入字符串是否为有效代码并运行输入