【发布时间】:2019-09-08 16:35:37
【问题描述】:
我正在使用 Vue 的动态组件来根据要显示的内容来加载组件。由于这些组件都有不同的 props,我构建了一个对象并通过 v-bind 传递它,具体取决于我需要从原始状态模型中使用什么。
但是,当我这样做时,我失去了 Vue 道具数据流的反应性。下面的代码示例显示了一个示例,其中名称在标准组件上更改,但在动态版本上没有更改。
我希望这与复制到新对象中的字符串值有关,而不是对原始反应属性的引用。谁能建议我如何按预期进行这项工作?
Vue.config.productionTip = false;
Vue.component("example-component", {
props: ["name"],
template: '<span style="color: green;">{{name}}</span>'
}
);
var app = new Vue({
el: "#app",
data: {
person: {
name: "William"
},
component: null
}
});
// Load the dynamic component
setTimeout(function() {
app.component = {
is: 'example-component',
props: { name: app.person.name }
}
// Change the name
setTimeout(function() {
app.person.name = "Sarah";
}, 2000);
}, 2000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<strong>Standard Component</strong><br />
<example-component :name="person.name"></example-component><br /><br />
<div v-if="component">
<strong>Dynamic Component</strong><br />
<component :is="component.is" v-bind="component.props"></component>
</div>
</div>
【问题讨论】:
-
模板应该引用数据或在 Vue 中计算以使其具有反应性。否则它只是一个普通变量,它不会得到reactivity。
标签: vue.js vue-component