vue组件4 利用slot将内容传递给组件

除了将数据作为prop传入到组件中,vue也允许传入HTML

父组件中的子组件:<custom-button>点我<custom-button/>

custom-button子组件:<span> <slot></slot> </sapn>

会生成<span>点我</span>

不仅可以传入字符串,也可以传入你想要的任何html,甚至是其他组件,这样可以创建复杂的页面,而不至于让组件的体积变得过于庞大

默认内容

如果solt元素设置了默认内容,那么该内容会在组件没有接收到内容时被当作默认内容使用

具名插槽

上面我们说所的是单个插槽,这是插槽最普遍的用法,当然也是最容易理解的,传递给组件的内容会替换掉它里面的slot元素输出到页面上。

除此之外我们还有具名插槽。具名插槽,它允许你在同一个组件中拥有多个插槽

<HelloWorld msg="Welcome to Your Vue.js App" :input="input">
      <button>hah</button>
      <div slot="header"> <span style="color:red">哈哈</span> </div>
    </HelloWorld>

子组件

<span>这里 <slot name="header"></slot>
     </span>

会生成

这里
哈哈

我们指定了某个元素应该被插入名为header 的插槽 其他的将被插入未命名的插槽

作用域插槽

可以将数据传回slot组件,使父组件中的元素可以访问子组件中的数据

//创建一个获取用户信息的组件,而数据的显示则留给父级元素来处理
    Vue.component('user-data',{
      template:" <div class='user'> <solt :user='user'>  </slot> </div> ",
      data:()=>({
      user:"test"
      }),
      mounted(){
        //设置this.user
      }
    })

任何传递给slot的属性都用slot-scope属性中定义的变量来获取

<div>
    <user-data >
     <template v-slot="user">//v-slot='user'===slot-scope="user" v-slot为官方最新语法          
用户名:
{{user.user.name}}
       </template>
    </user-data>
</div>

插槽作用域结构

解构slot-scope的属性就像解构函数参数一样 使用{}解构

 

posted @ 2019-12-01 22:37  四海潮生  阅读(2009)  评论(0编辑  收藏  举报