Vue.js NativeScript Vue更新数据对象?
是否可以使用新属性更新数据对象 数据来自外部源,因此数据不包含是否显示对象内容的标志是合理的Vue.js NativeScript Vue更新数据对象?,vue.js,nativescript,nativescript-vue,Vue.js,Nativescript,Nativescript Vue,是否可以使用新属性更新数据对象 数据来自外部源,因此数据不包含是否显示对象内容的标志是合理的 <RadListView for="item in list" @itemTap="accordion"> <v-template> <StackLayout> <Label :text="item.title" /> </StackLayout> <Stac
<RadListView for="item in list" @itemTap="accordion">
<v-template>
<StackLayout>
<Label :text="item.title" />
</StackLayout>
<StackLayout v-bind:height="item.toggled? 'auto' : 0">
<Label :text="item.desc" />
</StackLayout>
</v-template>
</RadListView>
因此,“列表”对象不包含切换属性,但我试图在用户单击UI中的某个项目时展开/折叠desc区域
我的代码按原样返回e.item.toggled,但UI不更新
未定义->真->假->真->假->
更新:
根据@sundeqvist的建议,我通过手风琴方法传递了item元素
我还修改了如何将toggled属性修改为数据对象list。通过直接添加,控制台将该值显示为真布尔值,而不是Vue[Getter/Setter]值
<RadListView for="item in list">
<v-template>
<StackLayout @itemTap="accordion(item)">
<Label :text="item.title" />
</StackLayout>
<StackLayout v-bind:height="item.toggled? 'auto' : 0">
<Label :text="item.desc" />
</StackLayout>
</v-template>
</RadListView>
您确定要访问方法中的项吗 通过将项传递到accordion方法调用中: 然后在方法中,在作为参数传入的项上切换toggle属性:
accordion(item) {
item.toggled = !item.toggled;
}
你应该能够让它工作。我想你让我走对了路,尽管我不确定这是不是正确的路-我将@itemTap=accordionitem向下移动到StackLayout元素-代码接收外部数据的地方,而不是给对象分配属性,我做了一个扩展{toggled:false,…data}-然后切换到vue[getter/setter]它看起来正在工作,但控制台使它看起来好像正在触发一个整体重画?整个阵列的重画?听起来很奇怪。。。你解决了吗?如果你能吐出一支密码笔,我就能查出来!
export default{
data(){
return{
list: [
{ "title" : "Sample Title", "desc" : "Lorem Ipsum" },
{ "title" : "New Title", "desc" : "Test 123 Test" }
]
}
},
methods: {
accordion: function(item){
item.toggled = !item.toggled;
},
loadData: function(){ ... },
generateData: function( data ){
let dataArr = [];
for( let d in data ){
d = { "toggled" : false, ...d };
dataArr.push( d );
}
this.list = dataArr;
}
}
}
accordion(item) {
item.toggled = !item.toggled;
}