Я генерирую содержимое компонента Vue путем итерации большого массива объектов.Я хотел бы использовать вычисляемые свойства, чтобы определить, показывать ли определенные узлы, но поскольку вычисленная ссылка используется внутри цикла, мне нужно иметь возможность динамически устанавливать имя ссылки.
Ниже приведен условный примеро том, что я пытаюсь сделать.Как я могу внести showItemX
изменения в зависимости от текущего элемента?
<template>
<ul>
<li v-for="item in myArr" v-if="showItemX">
{{ item.name }}
</li>
</ul>
</template>
<script>
export default {
data() {
return {
myArr: [{
id: 'item1',
name: 'Item 1'
}, {
id: 'item2',
name: 'Item 2'
}]
};
},
computed: {
showItem1: function() {
return this.$store.state.showItem1;
},
showItem2: function() {
return this.$store.state.showItem2;
}
}
}
</script>
2 возможных решения
Это два маршрута, которые я рассмотрел до сих пор, но я не уверенкакой из них будет более эффективным, или если будет предпочтительнее другой путь:
1.Вернуть единственный объект для вычисляемого свойства
. В этом варианте два вычисленных свойства выше будут объединены в одно свойство:
computed: {
showItem: function() {
return {
item1: this.$store.state.showItem1,
item2: this.$store.state.showItem2
}
}
}
Тогда для v-if
будет задано значениеshowItem[item.id]
:
<li v-for="item in myArr" v-if="showItem[item.id]">
{{ item.name }}
</li>
Недостатком здесь является то, что кажется, что весь объект пересчитывается каждый раз, когда изменяется одна из зависимостей.
2.Используйте метод для получения соответствующего вычисляемого свойства
Здесь я попытался передать item.id
методу в качестве способа доступа к соответствующему вычисляемому свойству:
computed: {
item1Show: function() {
return this.$store.state.showItem1;
},
item2Show: function() {
return this.$store.state.showItem2;
}
},
methods: {
showItem: function(id) {
return this[id + 'Show']
}
}
И в шаблоне:
<li v-for="item in myArr" v-if="showItem(item.id)">
{{ item.name }}
</li>
Опять же, в этом примере я не уверен, полностью ли я использую вычисленные свойства.
Если один из этих параметров предпочтительнее другого или являетсяЕсть ли лучший способ сделать это, что мне не хватает?