我的组件中有一个v-for:
<li v-for="(item, index) in items"></li>
但这也是范围插槽的一部分:
<div slot="modal">
....
<li v-for="(item, index) in items"></li>
....
那么,在父级中,如何在插槽中使用我自己的HTML,但仍然使用子组件中的items
数据?
答案 0 :(得分:1)
您可以使用scoped slots。
首先,在子组件中,通过将数组绑定到items
标记,指定插槽应该引用slot
道具:
<slot name="modal" :items="items">
然后,在父组件中,您可以使用items
指令访问slot-scope
数组:
<div slot="modal" slot-scope="props">
<li v-for="(item, index) in props.items"></li>
</div>
此处,props
是一个对象,其所有属性都已绑定到子组件的slot
标记。因此props.items
引用了子组件中的items
数组。
这是一个简单的例子:
Vue.component('child', {
template: `
<div>
<slot name="foo" :items="items"></slot>
</div>
`,
data() {
return { items: ['a', 'b', 'c'] };
}
})
new Vue({
el: '#app',
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div id="app">
<child>
<ul slot="foo" slot-scope="props">
<li v-for="(item, index) in props.items">
{{ item }}
</li>
</ul>
</child>
</div>