Javascript 包含属性X的第一个项上的Vue v-for调用方法

Javascript 包含属性X的第一个项上的Vue v-for调用方法,javascript,vue.js,vuejs2,Javascript,Vue.js,Vuejs2,假设我有一个组件,它以v-for循环重复,如下所示: <hotel v-for="(hotel, index) in hotels"></hotel> 当我的v-for循环仅在第一次遇到此truthy属性时才遇到属性name设置为true时,如何执行操作 我知道我可能会将某个属性缓存到某个位置,并且只运行一次,如果已设置,则不会再次运行,但这感觉效率不高。只需使用computed HTML 只要使用计算机 HTML 最好的方法是使用过滤功能 data() {

假设我有一个组件,它以
v-for
循环重复,如下所示:

<hotel v-for="(hotel, index) in hotels"></hotel>
当我的
v-for
循环仅在第一次遇到此truthy属性时才遇到属性
name
设置为true时,如何执行操作

我知道我可能会将某个属性缓存到某个位置,并且只运行一次,如果已设置,则不会再次运行,但这感觉效率不高。

只需使用computed

HTML

只要使用计算机

HTML


最好的方法是使用过滤功能

    data() {
     return {
      firstTime: false,
     };
    },
    filters: {
        myFunc: function (hotel) {
          if (hotel.name && !this.firstTime) {
             //perform some action
             this.firstTime = true;
          }
        }
    }

<hotel v-for="(hotel, index) in hotels | myFunc"></hotel>
data(){
返回{
第一次:错,
};
},
过滤器:{
myFunc:功能(酒店){
如果(hotel.name&&!this.firstTime){
//执行一些操作
this.firstTime=true;
}
}
}

最好的方法是使用过滤功能

    data() {
     return {
      firstTime: false,
     };
    },
    filters: {
        myFunc: function (hotel) {
          if (hotel.name && !this.firstTime) {
             //perform some action
             this.firstTime = true;
          }
        }
    }

<hotel v-for="(hotel, index) in hotels | myFunc"></hotel>
data(){
返回{
第一次:错,
};
},
过滤器:{
myFunc:功能(酒店){
如果(hotel.name&&!this.firstTime){
//执行一些操作
this.firstTime=true;
}
}
}

使用计算机复制
酒店
,其中第一家酒店拥有
isFirst
属性

computed: {
    hotelsWithFirstMarked() {
        var result = this.hotels.slice();
        var first = result.find(x => x.name);

        if (first) {
            first.isFirst = true;
        }
        return result;
    }
}

使用computed创建
hotels
的副本,其中第一个具有
isFirst
属性

computed: {
    hotelsWithFirstMarked() {
        var result = this.hotels.slice();
        var first = result.find(x => x.name);

        if (first) {
            first.isFirst = true;
        }
        return result;
    }
}

不能使用参数进行计算。你是说一种方法。这在重新渲染时也会有点脆弱。。有关无法使用参数进行计算的说明,请参阅本主题。你是说一种方法。这在重新渲染时也会有点脆弱。。请参阅本主题以获取解释,我猜如果要设置不存在的属性,我还应该使用
this.$set()
来保持反应性?而不是直接设置属性,或者这里不是这样吗?不是computed中的情况,在编写它时我不得不提醒自己两次。顺便说一下,您正在使用
Object.assign()
,然后依次调用对象上的
result.find
(数组原型方法)。我理解这个概念,但可能会将其更改为工作代码以供将来参考/其他用户使用?我猜如果我想设置一个不存在的属性,我还应该使用
this.$set()
来保持反应性?而不是直接设置属性,或者这里不是这样吗?不是computed中的情况,在编写它时我不得不提醒自己两次。顺便说一下,您正在使用
Object.assign()
,然后依次调用对象上的
result.find
(数组原型方法)。我理解这个概念,但可能会将其更改为工作代码,以供将来参考/其他用户使用?
computed: {
    hotelsWithFirstMarked() {
        var result = this.hotels.slice();
        var first = result.find(x => x.name);

        if (first) {
            first.isFirst = true;
        }
        return result;
    }
}