我正在使用v-for
基于对象数组呈现列表。
<ul>
<li v-for="category, i in categories"
:class="{active: category.active}"
@click="changeCategory(i)">
<a>{{ category.service_type_name }}</a>
</li>
</ul>
当您单击列表项时changeCategory(index)
运行:
changeCategory(index) {
this.categories.forEach((c, i) => {
c.active = (i != index)? false : true
})
}
因此,单击的列表项active
属性设置为true
,所有其他属性设置为false
,并且列表项.active
添加了一个类(因为:class="{active: category.active}"
模板中的行。
但是,DOM 不会更新以显示此更改。
无论如何,当发生这种变化时,是否会自动更新 DOM,而不this.$forceUpdate()
在changeCategory(index)
函数中使用?
编辑:更改map
为forEach
,DOM 仍然没有更新。
编辑:我正在使用带有打字稿的 vue-class-components
import Vue from 'app/vueExt'
import { Component } from 'vue-property-decorator'
import * as Template from './services.vue'
@Component({
mixins: [Template]
})
export default class Services extends Vue {
categories = []
created() {
this.api.getServiceSetupCatagories().then((res) => {
this.categories = res.categories
this.categories.forEach((c, i) => {
// adding active property to the object
// active = true if i = 0, false otherwise
c.active = (i)? false : true
})
})
}
changeCategory(index) {
this.categories.forEach((c, i) => {
c.active = (i != index)? false : true
})
}
}