vue中的插槽有三種:單個插槽、具名插槽、作用域插槽,這個在官網上能看到
(https://cn.vuejs.org/v2/guide/components.html#單個插槽)
作用域插槽簡單來說就是父組件只管顯示樣式,數據由子組件來提供。比如上面的代碼,el-table-column內的template是傳遞給其內部solt的顯示內容,但是scope的值是由el-table-column內部solt綁定的數據返回的。這個數據具體是什么由el-table-column中指定,類似:
<slot name="**" :data="data"></slot>export default {data: function(){return {data: ['1','2','3','4','5','6']}},}
而scope就是上面代碼中的data。
昨天看vue的官網文檔,在slot-scope這塊不是特別的明白,今天自己做了一個小例子,便于理解。
先說一下我們假設的應用常用場景,我們已經開發了一個代辦事項列表的組件,很多模塊在用,現在要求在 不影響已測試通過的模塊功能和展示 的情況下,給 已完成的代辦項增加一個對勾效果 。
也就是說,代辦事項列表組件要滿足一下幾點
解決辦法很多,不過為了解釋組件作用域插槽,我們就用slot-scope了,寫列一下之前組件的代碼。
todo-list.vue 組件
<template> <ul> <li v-for="item in todoList" v-bind:key="item.id"> <slot v-bind:itemValue = "item" > {{ item.test }} </slot> </li> </ul></template><script>export default { name: 'todoList', props: { todos: Array }, data(){ return { todoList:this.todos } }}</script>
組件代碼
<template> <ul> <li v-for="item in todoList" v-bind:key="item.id"> <slot> {{ item.test }} </slot> </li> </ul></template><script>export default { name: 'todoList', props: { todos: Array }, data(){ return { todoList:this.todos } }}</script>
父組件代碼
<template> <div id="app"> <h2>之前組件調用</h2> <todo-list v-bind:todos="todosBefore" ></todo-list> </div></template><script>import todoList from './components/todo-list.vue'export default { name: 'app', data:function(){ return { todosBefore:[ { test:'詢問時間', id:12312313123 }, { test:'代辦1', id:123123123423423 }, { test:'愛你地方年底見 主站蜘蛛池模板: 中山市| 高密市| 衡东县| 会昌县| 达孜县| 汉川市| 体育| 桐庐县| 电白县| 韩城市| 太原市| 七台河市| 龙岩市| 玛沁县| 巨野县| 华坪县| 温宿县| 鲁山县| 大邑县| 东港市| 瓮安县| 曲周县| 工布江达县| 建始县| 聊城市| 云梦县| 寻乌县| 长汀县| 古田县| 文登市| 甘泉县| 芦溪县| 娄烦县| 阳信县| 安福县| 永福县| 湖北省| 湘阴县| 彭阳县| 科尔| 宿迁市|