动态数组 v-bind class
Dynamic array v-bind class
我正在尝试对二维数组的值设置为 true 的项目设置 class。该数组如下所示:
test[item][day]
它是在一个方法中创建和设置的。
模板:
<div>
<div v-for="item in items" class="item-row">
<div class="item-name">item: {{ item.id }}</div>
<div v-for="day in days" class="item-header" v-bind:class="{'activeDay' : test[item.id][day]}">{{ day }}</div>
</div>
</div>
这个'works',但我确实得到一个错误:
vue.js?3de6:2902 TypeError: Cannot read property '0' of undefined(…)
我猜这是因为数组填充得太晚了?我将我的数组设置为:test[1][2] = 'true',但在我应该使用 Vue.set 的地方阅读。但是,我似乎无法获得将其用于二维数组的正确语法。
关于实现此目标的正确方法有何建议?
由于问题似乎与呈现组件时未填充的内容有关,因此只需控制模板何时呈现此二维数组或何时填充其内容即可。
选项 1
如果在首次创建组件时您可以访问二维数组所需的所有数据(即没有 ajax 请求数据)。然后只需将对构建数组的方法的调用移动到组件创建的方法中,即
created () {
this.buildItems()
},
...
选项 2
如果您需要通过 ajax 请求数据或由于某些其他原因无法在创建的方法中填充数组,则只需设置一个参数来指示它何时构建并控制其渲染,即
# template
<div v-if="itemsReady" v-for="item in items" class="item-row">
# script
data () {
return {
itemsReady: false, // set to true when you have built the items array
...
},
},
methods: {
buildItems () {
... // logic to build array
this.itemsReady = true
},
...
},
我正在尝试对二维数组的值设置为 true 的项目设置 class。该数组如下所示:
test[item][day]
它是在一个方法中创建和设置的。
模板:
<div>
<div v-for="item in items" class="item-row">
<div class="item-name">item: {{ item.id }}</div>
<div v-for="day in days" class="item-header" v-bind:class="{'activeDay' : test[item.id][day]}">{{ day }}</div>
</div>
</div>
这个'works',但我确实得到一个错误:
vue.js?3de6:2902 TypeError: Cannot read property '0' of undefined(…)
我猜这是因为数组填充得太晚了?我将我的数组设置为:test[1][2] = 'true',但在我应该使用 Vue.set 的地方阅读。但是,我似乎无法获得将其用于二维数组的正确语法。
关于实现此目标的正确方法有何建议?
由于问题似乎与呈现组件时未填充的内容有关,因此只需控制模板何时呈现此二维数组或何时填充其内容即可。
选项 1
如果在首次创建组件时您可以访问二维数组所需的所有数据(即没有 ajax 请求数据)。然后只需将对构建数组的方法的调用移动到组件创建的方法中,即
created () {
this.buildItems()
},
...
选项 2
如果您需要通过 ajax 请求数据或由于某些其他原因无法在创建的方法中填充数组,则只需设置一个参数来指示它何时构建并控制其渲染,即
# template
<div v-if="itemsReady" v-for="item in items" class="item-row">
# script
data () {
return {
itemsReady: false, // set to true when you have built the items array
...
},
},
methods: {
buildItems () {
... // logic to build array
this.itemsReady = true
},
...
},