Vue.extend 创建的子组件实例化时传递参数只能通过 propsData ??
组件内容如下
<template>
<div ref='container' class='container'>
<div class='list'></div>
<div class-'btns'>
<button @click='create'>动态添加项</button>
</div>
</div>
</template>
<script>
import user from 'user.vue'; // user.vue 的内容如下,请查看
export default {
mounted () {
this.container = this.$refs.container;
this.list = this.container.getElementsByClassName('list')[0];
} ,
methods: {
create () {
let div = document.createElement('div');
div.className = 'item';
let render = document.createElement('div');
let myComponent = Vue.extend(user);
new myComponent({
data () {
// 无法传递
_test_: 'test data'
} ,
propsData: {
// 可以传递,而官网解释说,该属性主要用于测试
// 无语了 ...
__id__: 'testid'
} ,
provide: {
// 无法传递
find: this.find
}
}).$mount(render);
div.appendChild(render);
this.list.appendChild(div);
} ,
find () {
console.log('nihao');
}
}
};
</script>
上面组件中点击按钮后悔挂载 user
子组件实例到 div
,然后添加 div
到 list
内。user.vue
的内容如下:
<template>..</template>
<script>
export default {
data () {
return {
say: 'nihao'
};
} ,
props: ['__id__'] ,
inject: ['find'] , // 这个 vue 会弹出警告
mounted () {
this.$nextTick(() => {
console.log(this.$parent); // undefined
console.log(this._testid_); // undefined
console.log(this.__id__); // testid
console.log(this.find); // undefined
});
}
};
</script>
是否 Vue.extend
创建的子组件,没有上下文环境(没有父组件的概念,他就是一个独立的组件个体),仅能通过 propsData
进行数据传递(当然也可以使用全局的东西,这边不考虑 ... )??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
https://cn.vuejs.org/v2/guide...,
通过以上链接看到解决方案,说了这样创建的组件是无法相应更新的,但是利用监听方法以及全局方法set来同步更新props
在Vue实例中构建类似于这样的
可以参考我的(vue动态创建组件篇)[https://blog.csdn.net/u012491...] 的github源代码,我在博客上讲是用:is特性来做的,这样组件props可动态传递的数据。其实我的git代码已经更新到extend方法了,就是上面写的,核心原理一致,细看我的代码,也就几句话的事情,互相学习