Vue系列-插槽$slot

在Vue中,插槽slot是可以由组件使用者来自定义内容,用来做组件的扩展。

如下,我们封装了一个列表组件
<template>
      ul
          li(v-for="item in list")
                span(v-html="item.text")
</template>
<script>
  export default{
      props:["list"]
  }
</script>

默认该组件可以让使用者传入list,遍历显示list中每个item的text值
但是,当使用者,不仅仅用来显示text值时,组件就要求做调整
如果不同使用者想要呈现的方式各异,我们没理由为这不同的呈现做特殊定制
这时候插槽就派上用场,将组件改造如下
<template>
      ul
          li(v-for="item in list")
              slot(:item="item")  
                  span(v-html="item.text")
</template>
<script>
  export default{
      props:["list"]
  }
</script>

使用者就可以自定义插槽内容,如list就是我们封装好的组件
可以显示内容项的名字
<list><tempalte scope="props"><span v-html="props.item.name"></span></template></list>
可以显示内容项的图片和描述
<list>
<tempalte scope="props">
<div>
    <img :src="props.item.img"/>
    <span v-html="item.desc"></span>
</div>
</template>
</list>

要注意的是,插槽也会带来一定的问题:Vue内部检测刷新的机制中,如果组件A中包含了插槽元素,子节点之类的,父组件更新的时候,该组件A会被强制更新。
如果组件A中render渲染比较耗时的话,要做多一层封装;

如下(其中test是我们上面封装好的组件)

<div id="app">
          <input type="text" v-model="name"/>
           <test :list="list" @hook:updated="testUpdated"><template scope="props"><span v-html="props.item.name"></span></template></test>
</div>
<script>
    new Vue({
        el:"#app",
        data:{
              list:[{name:"123"},{name:"456"},{name:"789"}],
              name:"test"
        },
        methods:{
              testUpdated:function(){
                       console.log("d")
              }
        }
    })
</script>

在这里,每次修改input框值,都会触发组件test的更新
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 7,510评论 0 25
  • 探索Vue高阶组件 高阶组件(HOC)是 React 生态系统的常用词汇,React 中代码复用的主要方式就是使用...
    君惜丶阅读 1,038评论 0 2
  • Test Vue.js Slots in Jest 测试Vue.js中的Slots插槽 Learn how to ...
    Revontulet阅读 3,083评论 0 1
  • 【2019-3-4更新】Vue 2.6+修改了部分语法,对插槽的使用有了较多的更新。在本文中笔者在相应位置给出了更...
    果汁凉茶丶阅读 10,452评论 2 36
  • 喜怒忧愁疏散地, 二两白浊尽兴意。 心情本是由心起, 杂货铺里卖东西。 你的文采不错,随口的小诗竟然工整押韵。 你...
    暴走的毛尖阅读 267评论 0 1

友情链接更多精彩内容