Vue.js 为什么该组件的计算属性不是反应性的:
我有一个这样的物体:Vue.js 为什么该组件的计算属性不是反应性的:,vue.js,vuejs2,Vue.js,Vuejs2,我有一个这样的物体: myObject: { items: [{ title: '140', isActive: true, }, { title: '7', isActive: false }, { title: '10', isActive: false }] } <my-component :items="myObject.items"></my-compon
myObject: {
items: [{
title: '140',
isActive: true,
}, {
title: '7',
isActive: false
}, {
title: '10',
isActive: false
}]
}
<my-component :items="myObject.items"></my-component>
onClick (index) {
Vue.set(this.items, index, true);
}
我是这样使用的:
myObject: {
items: [{
title: '140',
isActive: true,
}, {
title: '7',
isActive: false
}, {
title: '10',
isActive: false
}]
}
<my-component :items="myObject.items"></my-component>
onClick (index) {
Vue.set(this.items, index, true);
}
这是组件的外观:
<template>
<div class="i-panel panel-container d-flex"
<div
v-for="item in prefs.items"
class="panel-item"
@click="onClick(item)">
<!-- some content -->
</div>
</div>
</template>
<script>
export default {
name: 'IPanel',
props: {
items: {
type: Array,
default () {
return []
}
}
},
computed: {
// code
prefs () {
return {
items: this.items
}
}
},
methods: {
onClick (item) {
this.prefs.items.forEach(item => {
if (JSON.stringify(item) === JSON.stringify(clickedItem)) {
item.isActive = true
}
})
}
}
}
</script>
{
if(JSON.stringify(item)==JSON.stringify(clickedItem)){
item.isActive=true
}
})
}
}
}
当我单击一个项目时(该项目
与单击编辑项
相同),它应该变成活动的
item.isActive=true
没有反应?改变
<div
v-for="item in prefs.items"
class="panel-item"
@click="onClick(item)">
<!-- some content -->
</div>
改变
在您发布的代码中,您使用的是未在任何地方定义的clickedItem对象。我不知道这是在写你的问题的过程中还是你的问题 但是,当正确使用
clickedItem
时,它似乎可以工作:
HTML
<div id="app" class="i-panel panel-container d-flex">
<div
v-for="item in prefs.items"
class="panel-item"
@click="onClick(item)">
<!-- some content -->{{ item.isActive ? 'active' : 'inactive' }}
</div>
</div>
在您发布的代码中,您使用的是未在任何地方定义的clickedItem对象。我不知道这是在写你的问题的过程中还是你的问题 但是,当正确使用
clickedItem
时,它似乎可以工作:
HTML
<div id="app" class="i-panel panel-container d-flex">
<div
v-for="item in prefs.items"
class="panel-item"
@click="onClick(item)">
<!-- some content -->{{ item.isActive ? 'active' : 'inactive' }}
</div>
</div>
在您的
onClick
方法中,您使用的是clickedItem
对象,但我看不到它有任何定义。在onClick
方法中,您使用的是clickedItem
对象,但是我看不出它在任何地方都有定义。旁注:你不应该直接变异你的道具,而应该复制你的道具来使用它们。旁注:你不应该直接变异你的道具,而应该复制你的道具来使用它们: