插槽

插槽的基本使用

为什么使用插槽(slot)

插槽的目的是让我们原来的设备具有更多的扩展性
比如电脑的USB我们可以插入更多的设备

组件的插槽

组件的插槽也是为了让我们封装的组件更加具有扩展性,让使用者可以决定组件内部的一些内容到底展示什么。

 <!-- 
        1.插槽的基本使用     <slot></slot>
        2.插槽的默认值  <slot><button></button></slot>
        3.如果有多个值,同时放入到组件进行替换时,一起作为替换元素
     -->
    <div id="app">
       <cpn></cpn>
       <cpn><span>hahaha</span></cpn>
       <cpn>
           <span>哈哈哈</span>
           <h2>你好呀</h2>
       </cpn>
       </div>
       <template id="cpn">
           <div>
               <h2>
                   我是组件
               </h2>
               <p>我是组件哈哈哈</p>
               <slot><button>按钮</button> </slot>
               <!-- 给插槽一个默认值 -->
           </div>
       </template>
       <script src="./vue.js"></script>
       <script>
           
           const vm = new Vue({
               el:'#app', 
               data:{ 
                 message:'你好呀,李焕英'
               },
               components:{
                   cpn:{
                       template:'#cpn',
                   }
               }
           })
       </script>

在这里插入图片描述

具名插槽

当子组件的功能复杂时,子组件的插槽可能并非一个
,所以需要给插槽提供具体的名称

  <div id="app">
       <cpn><button slot="left">标题</button> </cpn>
       </div>
       <template id="cpn">
           <div>
               <slot name="left"><span>左边</span> </slot>
               <slot name="center"><span>中间</span> </slot>
               <slot name="right"><span>右边</span> </slot>
            </div>
       </template>
       <script src="./vue.js"></script>
       <script>
           
           const vm = new Vue({
               el:'#app', 
               data:{ 
                 message:'你好呀,李焕英'
               },
               components:{
                   cpn:{
                       template:'#cpn',
                   }
               }
           })
       </script>

在这里插入图片描述

作用域插槽

编译作用域

编译作用域:可以简单的理解为作用域
父组件模板的所有东西都会在父级作用域内编译(用父组件的数据)
子组件模板的所有东西都会在子级作用域内编译(使用子组件的数据);

<div id="app">
        <cpn v-show="isShow"></cpn>
        <!-- 在父组件中使用,则会使用父组件中的isShow -->
        </div>
        <template id="cpn">
            <div>
             <h2>我是子组件</h2>
             <p>我是内容 哈哈哈</p>
             <button v-show="isShow">按钮</button>
             </div>
        </template>
        <script src="./vue.js"></script>
        <script>
            
            const vm = new Vue({
                el:'#app', 
                data:{ 
                  message:'你好呀,李焕英',
                  isShow:true
                },
                components:{
                    cpn:{
                        template:'#cpn',
                        data(){
                            return {
                                isShow:false
                            }
                        }
                    }
                }
            })
        </script>

在这里插入图片描述

在该代码中,Vue实例(父组件)中和子组件中都定义了isShow属性,但在父组件使用时,会使用父组件中的isShow属性;在子组件模板中使用时,则使用子组件中的isShow属性

作用域插槽实例

<div id="app">
        <cpn></cpn>
        <!-- 目的是获取子组件中的fruits -->
        <cpn>
            <template slot-scope="slot">
           <span v-for=" item in slot.data">{{item}}-</span>
            </template>
        </cpn>
        </div>
        <template id="cpn">
            <div>
                <slot :data="fruits">
                    <ul>
                        <li v-for=" item in fruits">{{item}} </li>
                    </ul>
                </slot>
              
             </div>
        </template>
        <script src="./vue.js"></script>
        <script>
            
            const vm = new Vue({
                el:'#app', 
                data:{ 
                  message:'你好呀,李焕英',
                  isShow:true
                },
                components:{
                    cpn:{
                        template:'#cpn',
                        data(){
                            return {
                                fruits:['apple','pear','orange']
                            }
                        }
                    }
                }
            })
        </script>

运行结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值