作用域插槽


應用場景:父組件對子組件的內容進行加工處理

 

我們先來看2.6版本之前的寫法:

// 父組件
<template>
  <div id="app">
    <child>
      <template slot-scope="a">
        <p v-text="a.item"></p>
      </template>
    </child>
  </div>
</template>
<script>
import child from './child';
export default {
  name: 'app',
  components: {
    child
  }
}
</script>
//子組件
<template>
  <div>
    <ul>
      <li v-for="(item,index) in items" :key="index">{{item}}
        <slot :item='item'></slot>
      </li>
    </ul>
  </div>
</template>
<script>
export default {
  data () {
    return {
      items:['Webkit','Gecko','Trident','Blink']
    }
  }
}
</script>

再來看2.6版本之后的寫法,子組件的寫法不用變,和原來一模一樣,來看父組件的寫法:

// 父組件
<template>
  <div id="app">
    <child>
      <template v-slot="a">
        <p v-text="a.item"></p>
      </template>
    </child>
  </div>
</template>
<script>
import child from './child';
export default {
  name: 'app',
  components: {
    child
  }
}
</script>

我們可以清晰的看到,在子組件中有個插槽slot通過v-bind綁定了一個值item,在父組件中引用了子組件child,child標簽里面可以看到作用域插槽template,此時slot-scope就是一個對象,這個對象是由子組件的插槽slot所綁定的值所組成的一個對象,比如在這里slot-scope = {item},這里的item來自子組件,而這里slot-scope的值是a,所以就有了下面的

<p v-text="a.item"></p>

說到這里,想必大家都應該明白了作用域插槽了吧,簡單來說就一句話:可以綁定數據的插槽,顯示內容完全由子組件決定,數據來自子組件。

如果綁定數據太多,而你不需要全都用到的時候可以使用es6的對象解構


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM