【发布时间】:2018-12-06 11:46:25
【问题描述】:
我有一个通过插槽传递内容的组件。我正在使用渲染函数来输出内容。我使用渲染功能的原因是我想多次复制内容。当我使用此代码时,一切正常:
render(createElement){
return createElement('div', {}, this.$slots.default);
}
当我传递的数据发生变化时,输出也会发生变化。
但是,由于我想复制插槽内容,我现在正在尝试:
return createElement(
'div', {},
[
createElement('div', { }, this.$slots.default),
createElement('div', { }, this.$slots.default)
]
)
现在的问题是,当 slot 内容从组件外部发生变化时,只有第二个 div 中的内容被更新,第一个 div 中的内容保持不变..
我错过了什么吗?
【问题讨论】:
-
我认为您将不得不手动克隆默认插槽引用的那些元素。你的第二个例子是我所期望的。首先,它将
$slots.default设置为您首先创建的元素的子元素,然后立即将它们再次移动为第二个创建元素的子元素,此时它们离开第一个元素。我不知道 Vue 有一种内置的方法来以render()期望的格式递归克隆元素。 -
我想如果
$slots.default中的元素在 Vue 上下文之外,您可以考虑将原生cloneNode与deep设置为true并看看是否有效。跨度> -
我仍然觉得很奇怪,因为在第一次渲染期间它们都被渲染了。只有当插槽内容发生变化时才会出现问题。我试过 cloneNode 但这似乎不起作用(至少 this.$slots.default.cloneNode(true) 或 this.$slots.default[0].cloneNode(true) 给我错误说它不是一个函数)
标签: vue.js vuejs2 vue-component