Vuejs 使用插槽在 parent child 组件之间传递数据
Vuejs passing data between parent child components using slots
我可以像这样创建一个 parent child 组件:
Child 组件
Vue.component('my-child', {
template: '<div>{{value}}</div>',
props: {
value: {
type: String,
default: ""
}
}
});
Parent 组件
请注意 my-child 组件是如何在 parent 模板中被引用的。
Vue.component('my-parent', {
template: '<div><span>Hello</span><my-child :value="value"></my-child></div>',
data: function () {
return {
value: ""
}
},
});
然后我可以像这样使用它:
<my-parent :value="ABC"></my-parent>
值 "ABC" 正确传递给 child 并按预期显示。
但是,我需要做的如下(基本上我已经将 my-child 从 parent 模板中拉出并放回 HTML。我会我可以在 my-parent 中使用许多不同的 my-child 组件):
<my-parent :value="ABC">
<my-child></my-child>
</my-parent>
我更改了 parent 组件以使用这样的插槽:
Vue.component('my-parent', {
template: '<div><span>Hello</span><slot :value="value"></slot></div>',
data: function () {
return {
value: ""
}
},
});
my-child 模板正在获取并显示,但 ABC 值没有像我预期的那样传递到 my-child 组件。
如果我这样做:
<my-parent :value="ABC">
<my-child :value="value"></my-child>
</my-parent>
my-child 绑定实际上在根实例上查找 'value' 而不是从 my-parent 查找,这不是我想要的。
如何通过插槽向下传递数据?
要将数据从组件传递到其插槽中的内容,您需要使用 scoped slot。
在父组件模板中,将要传递给子组件的属性添加到插槽中:
<div><span>Hello</span><slot :value="value"></slot></div>
然后在使用父项的模板中,使用带有 scope
属性 的 template
标签。
<my-parent :value="ABC">
<template scope="props">
<my-child :value="props.value"></my-child>
</template>
</my-parent>
这是工作 fiddle。
我可以像这样创建一个 parent child 组件:
Child 组件
Vue.component('my-child', {
template: '<div>{{value}}</div>',
props: {
value: {
type: String,
default: ""
}
}
});
Parent 组件
请注意 my-child 组件是如何在 parent 模板中被引用的。
Vue.component('my-parent', {
template: '<div><span>Hello</span><my-child :value="value"></my-child></div>',
data: function () {
return {
value: ""
}
},
});
然后我可以像这样使用它:
<my-parent :value="ABC"></my-parent>
值 "ABC" 正确传递给 child 并按预期显示。
但是,我需要做的如下(基本上我已经将 my-child 从 parent 模板中拉出并放回 HTML。我会我可以在 my-parent 中使用许多不同的 my-child 组件):
<my-parent :value="ABC">
<my-child></my-child>
</my-parent>
我更改了 parent 组件以使用这样的插槽:
Vue.component('my-parent', {
template: '<div><span>Hello</span><slot :value="value"></slot></div>',
data: function () {
return {
value: ""
}
},
});
my-child 模板正在获取并显示,但 ABC 值没有像我预期的那样传递到 my-child 组件。
如果我这样做:
<my-parent :value="ABC">
<my-child :value="value"></my-child>
</my-parent>
my-child 绑定实际上在根实例上查找 'value' 而不是从 my-parent 查找,这不是我想要的。
如何通过插槽向下传递数据?
要将数据从组件传递到其插槽中的内容,您需要使用 scoped slot。
在父组件模板中,将要传递给子组件的属性添加到插槽中:
<div><span>Hello</span><slot :value="value"></slot></div>
然后在使用父项的模板中,使用带有 scope
属性 的 template
标签。
<my-parent :value="ABC">
<template scope="props">
<my-child :value="props.value"></my-child>
</template>
</my-parent>
这是工作 fiddle。