最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 三分钟学会vue中slot插槽的用法

    正文概述 掘金(传奇控卫库里)   2020-12-21   467

    插槽,简单理解就是可以即插即用的一段代码。vue中,插槽可以大致分为以下三种:

    • 默认插槽
    • 具名插槽
    • 默认插槽

    1、默认插槽

    子组件内写法(child.vue):

    <template>
    	<!--组件内其他代码-->
    	<slot></slot> 
        	<!--组件内其他代码-->
    </template>
    

    父组件内写法(parent.vue)

    <Child>
      <template>
      	<span>插槽内要显示的内容</span>
      </template>
    </Child>
    

    最后渲染出来的结果:

    <!--组件内其他代码-->
    <span>插槽内要显示的内容</span>
    <!--组件内其他代码-->
    

    所以,简单来说,默认插槽就是子组件内占了一个位置,在父组件内调用子组件的时候,写入什么内容,就会在这个位置显示出什么内容来。

    2、具名插槽

    子组件内写法(child.vue):

    <template> 
        <!--组件内其他代码-->
        <slot name="slot1"></slot>
        <slot></slot> 
        <slot name="slot2"></slot>
        <!--组件内其他代码-->
    </template>
    

    父组件内写法(parent.vue):

    <Child>
      <template v-slot="slot1">
      	<span>插槽slot1内显示的内容</span>
      </template>
      <!--也可以使用 #插槽名 的形式-->
      <template #slot2>
      	<span>插槽slot2内显示的内容</span>
      </template>
      <template>
      	<span>默认插槽内要显示的内容</span>
      </template>
    </Child>
    

    最后渲染出来的结果:

    <!--组件内其他代码-->
    <span>插槽slot1内显示的内容</span>
    <span>插槽内要显示的内容</span>
    <span>默认插槽内要显示的内容</span>
    <!--组件内其他代码-->
    

    由此可见,具名插槽就是,子组件内定义插槽的时候,取了一个名字,父组件调用的时候,通过v-slot="插槽name"指令将内容分发至指定位置,从而在页面渲染出来。需要注意的是:最后渲染出来的内容,是由子组件内定义的插槽的内容位置,与父组件内调用时传入的slot顺序没有关系。

    3、作用域插槽

    有时候,我们在插槽内想访问子组件内的数据时,就需要用到作用域插槽。

    子组件内写法(child.vue):

    <template> 
        <!--组件内其他代码-->
        <slot name="slot1" propsName="我是子组件内slot1的数据"></slot>
        <slot name="slot2" :propsName="{a:1,b:2}"></slot>
        <!--组件内其他代码-->
    </template>
    

    父组件内写法(parent.vue):

    <Child>
      <template #slot1="data">
      	<span>{{data.propsName}}</span>
      </template>
      <template #slot2="data">
      	<span>{{data.propsName.a}} ---- {{data.propsName.b}}</span>
      </template>
    </Child>
    

    最后渲染出来的结果:

    <!--组件内其他代码-->
    <span>我是子组件内slot1的数据</span>
    <span>1---2</span>
    <!--组件内其他代码-->
    

    作用域插槽,就是在子组件内以propName="data"的形式传数据,在父组件写插槽的时候用#插槽名="定义的对象名"的形式接受,插槽内用{{定义的对象名.propName}}的形式使用数据。也可以用过解构的写法:

    子组件内写法(child.vue):

    <template> 
        <!--组件内其他代码-->
        <slot name="slot1" prop1="我是prop1的内容" prop2="我是prop2的内容"></slot>
        <!--组件内其他代码-->
    </template>
    

    父组件内写法(parent.vue):

    <Child>
      <template #slot1="{prop1, prop2}">
      	<span>{{prop1}}-----{{prop2}}</span>
      </template>
    </Child>
    

    最后渲染出来的结果:

    <span>我是prop1的内容-----我是prop2的内容</span>
    

    总结

    插槽虽然在日常封装的简单组件中比较少用到,但却是封装高级组件中必不可少的功能,插槽可以大大提高组件的可复用性。例如:一个组件,在A页面与B页面调用时,只有组局部稍有差异,或者这部分内容在每个页面显示的形态都不一样,就可采用插槽的形式封装这部分。

    当然,此次分享作者也只是抛砖引玉,欢迎各位大佬分享指正。


    下载网 » 三分钟学会vue中slot插槽的用法

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元