Vue系列-插槽$slot

作者: 前端切克闹 | 来源:发表于2019-08-18 21:32 被阅读3次

在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的更新

相关文章

  • Vue之深入理解插槽—slot, slot-scope, v-s

    Vue 2.6.0 以前Vue 2.6.0 以后具名插槽 slot具名插槽 v-slot作用域插槽 slot-sc...

  • vue插槽

    vue插槽slot的理解与使用 vue slot插槽的使用介绍及总结

  • vue中的slot(插槽)

    vue中的插槽————slot 什么是插槽? 插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定...

  • vue 插槽的使用

    vue 插槽手册 深入理解vue中的slot与slot-scope 插槽的使用其实是很简单首先要明白插槽是使用在子...

  • 18、Vue3 作用域插槽

    作用域插槽:让插槽内容能够访问子组件中,vue2中作用域插槽使用slot-scope,vue3中使用v-slot ...

  • Vue系列-插槽$slot

    在Vue中,插槽slot是可以由组件使用者来自定义内容,用来做组件的扩展。 要注意的是,插槽也会带来一定的问题:V...

  • vue3-slot-消息框-模态框

    1.前言 1.使用vue3 的slot插槽时,大部分和vue2-slot插槽[https://www.jiansh...

  • slot是什么?有什么作用?原理是什么?

    slot又名插槽,是Vue的内容分发机制,组件内部的模板引擎使用slot元素作为承载分发内容的出口。插槽slot是...

  • slot(插槽)

    slot又称插槽,是Vue的内容分发机制,组件内部的模板引擎使用slot元素作为承载分发内容的出口。插槽slot是...

  • slot 用法以及使用场景

    Vue的插槽slot,分为3种 匿名插槽 具名插槽 作用域插槽 前两种很好理解,无非就是子组件里定义一个slot占...

网友评论

    本文标题:Vue系列-插槽$slot

    本文链接:https://www.haomeiwen.com/subject/jmakjctx.html