首頁  >  文章  >  web前端  >  vue組件的slot插口使用詳解

vue組件的slot插口使用詳解

php中世界最好的语言
php中世界最好的语言原創
2018-04-20 13:37:321386瀏覽

這次帶給大家vue組件的slot插口使用詳解,vue組件slot插口使用的注意事項有哪些,下面就是實戰案例,一起來看一下。

子元件

<template>
  <p class="slotcontent">
    <ul>
      <!--<slot></slot>-->
      <li v-for="item in items">{{item.text}}</li>
    </ul>
  </p>
</template>
<script>
  export default{
    data(){
      return{
        items:[
          {id:1,text:'第1段'},
          {id:2,text:'第2段'},
          {id:3,text:'第3段'},
        ]
      }
    }
  }
</script>
<style scoped>
</style>

  父元件

<template>
  <p>
    <h2>首页</h2>
    <router-link to="/home/details">跳转到详情</router-link>
    <p>父组件</p>
    <slotshow>
      <p>{{msg}}</p>
    </slotshow>
  </p>
</template>
<script>
  import slotshow from '../components/slotshow'
  export default{
    data(){
      return{
        msg:"测试内容"
      }
    },
    components:{
      slotshow
    }
  }
</script>
<style>
</style>

  這種情況是如果要父元件在子元件中插入內容,必須在子元件中宣告slot 標籤  ,如果子元件範本不包含插口,父元件的內容<p>{{msg}}</p> 將會被丟棄。

 當slot存在預設值

預設值

,且父元素在<slotshow></slotshow>##<

中沒有要插入的內容時,會顯示

預設值

(p標籤會去掉),當slot存在預設值,且父元素在中存在要插入的內容時,則顯示父元件中設定的值,

具名slot

# 元素可以用一個特殊的屬性

name 來設定如何散佈內容。多個 slot 可以有不同的名字。具名slot 將匹配內容片段中有對應slot 特性的元素

var childNode = {
 template: `
 <p class="child">
 <p>子组件</p>
 <slot name="my-header">头部默认值</slot>
 <slot name="my-body">主体默认值</slot>
 <slot name="my-footer">尾部默认值</slot>
 </p>
 `,
};
var parentNode = {
 template: `
 <p class="parent">
 <p>父组件</p>
 <child>
 <p slot="my-header">我是头部</p>
 <p slot="my-footer">我是尾部</p>
 </child>
 </p>
 `,
 components: {
 'child': childNode
 },
};

#仍然可以有一個匿名slot,它是預設slot,作為找不到匹配的內容片段的備用插槽。匿名slot只能作為沒有slot屬性的元素的插槽,有slot屬性的元素如果沒有配置slot,則會被拋棄

var childNode = {
 template: `
 <p class="child">
 <p>子组件</p>
 <slot name="my-body">主体默认值</slot>
 <slot></slot>
 </p>
 `,
};
var parentNode = {
 template: `
 <p class="parent">
 <p>父组件</p>
 <child>
 <p slot="my-body">我是主体</p>
 <p>我是其他内容</p>
 <p slot="my-footer">我是尾部</p>
 </child>
 </p>
 `,
 components: {
 'child': childNode
 },
};
<p slot="my-body">插入<slot name="my-body">中,<p>我是其他内容</p>插入<slot>中,而<p slot="my-footer">被丢弃

如果沒有預設的slot,這些找不到符合的內容片段也會被拋棄

var childNode = {
 template: `
 <p class="child">
 <p>子组件</p>
 <slot name="my-body">主体默认值</slot>
 </p>
 `,
};
var parentNode = {
 template: `
 <p class="parent">
 <p>父组件</p>
 <child>
 <p slot="my-body">我是主体</p>
 <p>我是其他内容</p>
 <p slot="my-footer">我是尾部</p>
 </child>
 </p>
 `,
 components: {
 'child': childNode
 },
};
<p>我是其他内容</p>和<p slot="my-footer">都被抛弃

#作用域插槽

作用域插槽是一種特殊類型的插槽,用作使用一個(能夠傳遞資料到) 可重複使用範本替換已渲染元素。 在子元件中,只需將資料傳遞到插槽,就像將props 傳遞給元件一樣

<span style="font-size: 16px"><p class="child">
 <slot text="hello from child"></slot>
</p></span>

在父級中,具有特殊屬性scope 的