【发布时间】:2019-05-16 03:16:54
【问题描述】:
问题:
有没有办法更新像这样创建的手动安装的 vue 组件/实例的道具?我传入一个名为 item 的对象作为组件的 data 属性。
let ComponentClass = Vue.extend(MyComponent);
let instance = new ComponentClass({
propsData: { data: item }
});
// mount it
instance.$mount();
为什么
我有一个非 vue 3rd 方库,可以在时间轴上呈现内容 (vis.js)。因为我的应用程序的其余部分是用 vue 编写的,所以我试图将 vue 组件用于时间轴本身的内容。
我已经设法通过在 vis.js 的模板函数中手动创建和挂载组件来在时间轴上呈现组件。
template: function(item, element, data) {
// create a class from the component that was passed in with the item
let ComponentClass = Vue.extend(item.component);
// create a new vue instance from that component and pass the item in as a prop
let instance = new ComponentClass({
propsData: { data: item },
parent: vm
});
// mount it
instance.$mount();
return instance.$el;
}
item.component 是一个接受数据属性的 vue 组件。
我可以通过这种方式创建和挂载 vue 组件,但是当 item 更改时,我需要更新组件上的 data 属性。
【问题讨论】:
-
我怀疑您需要为父级编写一个
render函数,以显示您的动态新组件。这就是你正确连接道具的方式。propsData是不可更改的,用于测试创建。 -
@RoyJ 所以没有办法将动态道具添加到手动安装的实例?甚至使用不同于
propsData的东西?我没有在渲染函数中安装这个组件的选项,因为它被传递到第 3 方库(不是 vue)。 -
如果
item是一个成员值发生变化的对象,你可以设置data函数返回item并可能得到你想要的。 -
@RoyJ 你能举个例子吗?