#未命名插槽
slot未命名时,每个标签内都会生成父组件中提供的内容。
父组件app.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <template> <div id='app'> <slottest> <h1>Here might be a page title</h1> <p>A paragraph for the main content.</p> <p>And another one.</p> <p>Here's some contact info</p> </slottest> </div> </template> <script> import slottest from './components/slottest' export default { data(){ return { } }, components:{ slottest } } </script>
|
子组件slottest.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <template> <div> <slot></slot> <slot></slot> </div> </template> <script> export default { data(){ return { } } } </script>
<style>
</style>
|
渲染HTML如下
如果子组件中没有包含任何一个 元素,则任何传入它的内容都会被抛弃。
#命名插槽
父组件app.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| <template> <div id='app'> <button-counter></button-counter> <slottest> <h1 slot="header">Here might be a page title</h1> <p>A paragraph for the main content.</p> <p>And another one.</p> <p slot="footer">Here's some contact info</p> </slottest> </div> </template> <script> import slottest from './components/slottest' export default { data(){ return { } }, components:{ slottest } } </script>
|
子组件slottest.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <template> <div> <header> <slot name="header"></slot> </header> <main> <slot></slot> </main> <footer> <slot name="footer"></slot> </footer> </div> </template> <script> export default { data(){ return { } } } </script>
<style>
</style>
|
渲染完后html结构
#默认内容
1 2 3
| <button type="submit"> <slot>Submit</slot> </button>
|
如果父组件为这个插槽提供了内容,则默认的内容会被替换掉。
#作用域插槽 | 带数据的插槽
作用域插槽要求,在slot上面绑定数据。
1 2 3 4 5 6 7 8
| <slot name="up" :data="data"></slot> export default { data: function(){ return { data: ['zhangsan','lisi','wanwu','zhaoliu','tianqi','xiaoba'] } }, }
|
父组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| <template> <div class="father"> <h3>这里是父组件</h3> <!--第一次使用:用flex展示数据--> <child> <template slot-scope="user"> <div class="tmpl"> <span v-for="item in user.data">{{item}}</span> </div> </template>
</child>
<!--第二次使用:用列表展示数据--> <child> <template slot-scope="user"> <ul> <li v-for="item in user.data">{{item}}</li> </ul> </template>
</child>
<!--第三次使用:直接显示数据--> <child> <template slot-scope="user"> {{user.data}} </template>
</child>
<!--第四次使用:不使用其提供的数据, 作用域插槽退变成匿名插槽--> <child> 我就是模板 </child> </div> </template>
|
子组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <template> <div class="child">
<h3>这里是子组件</h3> // 作用域插槽 <slot :data="data"></slot> </div> </template>
export default { data: function(){ return { data: ['zhangsan','lisi','wanwu','zhaoliu','tianqi','xiaoba'] } } }
|