具名插槽

插槽:vue内容分发的机制,只能用在组件当中的 结合v-solt(出口)使用  <solt></slot>其实就是占位的作用 来接收html中组件标签里面的内容 最终页面渲染的是组件的template里的内容
 
 
具名插槽 : v-solt标签只能用于template标签中
在 <slot> 标签 添加 name属性指定 插槽名 , <slot name='自定义的插槽名'></slot>
                在组件模板中可以添加多个插槽 , 使用具名插槽,通过 指定插槽名进行区分
                语法格式:
                    <组件标签名>
                        <template v-slot:自定义插槽名>
                            .... 写入 内容(字符串, html, 组件 ...)
                        </template>
                    </组件标签名>  
 1 <div id="app">
 2         <!-- 1  组件标签内写入内容 -->
 3         <!-- <first-child>hello world</first-child> -->
 4 
 5         <!--  默认是添加到 默认插槽 -->
 6         <!-- <first-child>
 7             <p>hello world ==== {{msg}}</p>
 8             <ul>
 9                 <li>xiangmu</li>
10                 <li>xiangmu</li>
11                 <li>xiangmu</li>
12                 <li>xiangmu</li>
13             </ul>
14             <h1>内容</h1>
15         </first-child> -->
16 
17 
18         <!-- =============== 具名插槽   需要结合v-slot 指令指定插槽名, v-slot 指令只能 用于 <template> 标签上  ; 页面渲染的结构 由组件模板决定, 而不是添加插槽内容的顺序  -->
19 
20         <first-child>
21             <!--  凡是没有指定具体的插槽名的内容 将被放到默认插槽中-->
22             <h1>也将会添加到默认插槽</h1>
23 
24             <!-- 在向具名插槽提供内容的时候,我们可以在一个 <template> 元素上使用 v-slot 指令,并以 v-slot 的参数的形式提供其名称:  -->
25             <template v-slot:slide>
26                  <p >hello world </p>
27             </template>
28 
29             <template v-slot:content>
30                 <second-child></second-child>
31             </template>
32 
33             <!--   -->
34             <em>没有使用 template 标签包裹 </em>          
35 
36         </first-child>
37 
38         <first-child>
39             <!--  这两种方式都是往默认插槽分发内容,但是不能同时使用, 二选一,  -->
40             
41             <!-- 指定默认插槽   默认插槽名是 default -->
42             <template v-slot:default>
43                 <strong>这个内容 ????</strong>
44             </template>
45 
46             <!--  默认使用 默认插槽 -->
47             <!-- <p>默认插槽==============</p> -->
48 
49         </first-child>
50     </div>
 1 <script src="./js/vue.global.min.js"></script>
 2     <script>
 3         const app = Vue.createApp({
 4             data(){
 5                 return{
 6                     msg:'hello vue3'
 7                 }
 8             }
 9         })
10 
11         const FirstChild = {
12             template:`
13                 <div>
14                     <p>默认的结构</p>
15                     <div class='wrap'>
16                         <div class='nav'>
17                             <slot></slot> 
18                         </div>   
19                         <div class='slide'>
20                             侧边栏:
21                             <slot name='slide'></slot> 
22                         </div>   
23                         <div class='body'>
24                             <slot name='content'> </slot> 
25                         </div>   
26                     </div>
27                 </div>
28             `
29         }
30 
31         const SecondChild = {
32             template:`
33                 <div>
34                     组件作为插槽内容
35                 </div>
36             `
37         }
38 
39 
40         app.component('FirstChild', FirstChild)
41         app.component('SecondChild', SecondChild)
42 
43         app.mount('#app')
44     </script>

 

posted @ 2022-07-13 14:18  请善待容嬷嬷  阅读(241)  评论(0编辑  收藏  举报