javascript - vue - 通过组件数组添加时属性不反应
问题描述
嘿,我的代码如下所示:
componentData: [
{ name: TestPane, props: { data: this.cars }, id: 1 },
{ name: TestPane, props: { data: this.persons }, id: 2 },
]
<div v-for="component in componentData" :key="component.id">
<component v-bind:is="component.name" v-bind="component.props">
</component>
</div>
道具不是反应性的。当我在没有循环的情况下正常传递道具时,:data=cars
它们是反应性的。但我需要为我的项目循环传递它们。有任何想法吗?
解决方案
除非您像这样定义数据,否则它将起作用:
data() {
return {
cars: [ ... ],
persons: [ ... ],
componentData: [
{ name: TestPane, props: { data: this.cars }, id: 1 },
{ name: TestPane, props: { data: this.persons }, id: 2 },
]
}
}
this.cars
并且this.persons
在您定义时无法访问componentData
。使用计算来保持反应性:
new Vue({
el: "#app",
data() {
return {
cars: [ ... ],
persons: [ ... ]
}
},
computed: {
componentData() {
return [
{ name: TestPane, props: { data: this.cars }, id: 1 },
{ name: TestPane, props: { data: this.persons }, id: 2 },
]
}
}
});
编辑:这是一个演示
const TestPane = {
template: `
<div class="pane">
{{ data }}
</div>
`,
props: ['data']
}
/***** APP *****/
new Vue({
el: "#app",
data() {
return {
cars: ['honda', 'ferrari'],
persons: ['Bob', 'Mary']
}
},
computed: {
componentData() {
return [
{ name: TestPane, props: { data: this.cars }, id: 1 },
{ name: TestPane, props: { data: this.persons }, id: 2 },
]
}
}
});
.pane {
padding: 12px;
background: #dddddd;
margin: 4px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div v-for="component in componentData" :key="component.id">
<component v-bind:is="component.name" v-bind="component.props">
</component>
</div>
</div>
推荐阅读
- javascript - 如何在javascript中在一段时间后触发按钮的单击事件
- java - 线程“AWT-EventQueue-0”中的异常 java.util.NoSuchElementException 代码之前工作过,现在它不起作用
- azure - 合作伙伴中心权限丢失
- jquery - 根据所选选项显示相关 div
- javascript - 我可以在数组元素周围包装一个类吗?
- wso2is - WSO2 API + SSO - 被动模式和匿名存储访问
- nginx - 自托管 Gitlab 服务器无法访问
- laravel - 使用 Let's Encrypt 为我的 laravel 应用程序提供 SSL 保护
- wpf - 混合制作的样式在 Visual Studio 中不起作用
- css - 在标题下添加横幅图像