亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue作用域插槽slot-scope實(shí)例代碼

 更新時(shí)間:2018年09月05日 08:28:36   作者:愚坤  
這篇文章主要介紹了Vue作用域插槽slot-scope實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

vue中的插槽有三種:?jiǎn)蝹€(gè)插槽、具名插槽、作用域插槽,這個(gè)在官網(wǎng)上能看到

https://cn.vuejs.org/v2/guide/components.html#單個(gè)插槽

作用域插槽簡(jiǎn)單來(lái)說(shuō)就是父組件只管顯示樣式,數(shù)據(jù)由子組件來(lái)提供。比如上面的代碼,el-table-column內(nèi)的template是傳遞給其內(nèi)部solt的顯示內(nèi)容,但是scope的值是由el-table-column內(nèi)部solt綁定的數(shù)據(jù)返回的。這個(gè)數(shù)據(jù)具體是什么由el-table-column中指定,類(lèi)似:

<slot name="**" :data="data"></slot>
export default {
data: function(){
return {
data: ['1','2','3','4','5','6']
}
},
}

而scope就是上面代碼中的data。

昨天看vue的官網(wǎng)文檔,在slot-scope這塊不是特別的明白,今天自己做了一個(gè)小例子,便于理解。

先說(shuō)一下我們假設(shè)的應(yīng)用常用場(chǎng)景,我們已經(jīng)開(kāi)發(fā)了一個(gè)代辦事項(xiàng)列表的組件,很多模塊在用,現(xiàn)在要求在 不影響已測(cè)試通過(guò)的模塊功能和展示 的情況下,給 已完成的代辦項(xiàng)增加一個(gè)對(duì)勾效果 。

也就是說(shuō),代辦事項(xiàng)列表組件要滿(mǎn)足一下幾點(diǎn)

  1. 之前數(shù)據(jù)格式和引用接口不變,正常展示
  2. 新的功能模塊增加對(duì)勾

解決辦法很多,不過(guò)為了解釋組件作用域插槽,我們就用slot-scope了,寫(xiě)列一下之前組件的代碼。

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>之前組件調(diào)用</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:'詢(xún)問(wèn)時(shí)間',
   id:12312313123
  },
  {
   test:'代辦1',
   id:123123123423423
  },
  {
   test:'愛(ài)你地方年底見(jiàn)覅',
   id:12312313123234234
  },
  {
   test:'時(shí)間2',
   id:1231231312323333
  },
  {
   test:'師生情是行情',
   id:12313333333
  }
  ]
 }
 },
 components: {
 todoList
 }
}
</script>

展示效果

步驟

為了實(shí)現(xiàn)代辦事項(xiàng)增加對(duì)勾效果,我們要在data中調(diào)整數(shù)據(jù)結(jié)構(gòu),新增 todosAfter 數(shù)組,并給每一項(xiàng)增加 isComplete 標(biāo)識(shí)。

todosAfter:[
  {
   test:'詢(xún)問(wèn)時(shí)間',
   isComplete:true,
   id:12312313123
  },
  {
   test:'代辦1',
   isComplete:false,
   id:123123123423423
  },
  {
   test:'愛(ài)你地方年底見(jiàn)覅',
   isComplete:false,
   id:12312313123234234
  },
  {
   test:'時(shí)間2',
   isComplete:true,
   id:1231231312323333
  },
  {
   test:'師生情是行情',
   isComplete:true,
   id:12313333333
  }
  ],

理解插槽和數(shù)據(jù)傳遞

自己在看別人的帖子比較吃力的地方就是弄不清楚這個(gè)插槽作用域到底是什么,有什么功能,我用大白話來(lái)屢屢思路。 弄清楚兩個(gè)問(wèn)題

  1. 插槽solt代碼在哪里編寫(xiě)? 當(dāng)然在父組件內(nèi), solt是子組件暴露給父組件的接口,需要父組件傳給子組件 。
  2. 插槽作用域,作用域插槽字面理解,僅僅只對(duì)插槽生效。

那傳遞步驟是

  1. 父組件把數(shù)據(jù)給子組件,父=>子
  2. 子組件把數(shù)據(jù)給插槽,并暴露給父組件接口
  3. 父組件調(diào)用子組件的插槽slot接口和數(shù)據(jù)

我們之前給數(shù)據(jù)數(shù)據(jù)增加了 isComplete 屬性,現(xiàn)在要將子組件 item 傳遞給插槽,并給父組件暴露數(shù)據(jù)接口 itemValue ,重點(diǎn)在 v-bind:itemValue = "item" 這一句 。

<template>
 <ul>
 <li v-for="item in todoList" v-bind:key="item.id">
  <slot v-bind:itemValue = "item" >
   {{ item.test }} 
  </slot>
 </li>
 </ul>
</template>

接下來(lái)是父組件調(diào)用子組件的slot和 itemValue 數(shù)據(jù)。

<h2>之前組件調(diào)用</h2>
<todo-list v-bind:todos="todosAfter">
 <template slot-scope="slotProps">
  <!-- 打印itemvalue數(shù)據(jù)-->
  <div style="background:red; border-bottom:2px solid blue;">
   {{slotProps.itemvalue}}
  </div>
  <!-- 根據(jù)判斷條件展示對(duì)號(hào)元素 -->
  <span v-if="slotProps.itemValue.isComplete">✓</span>
  <!-- 顯示代辦事項(xiàng)名稱(chēng) -->
  {{ slotProps.itemValue.test }}
 </template>

</todo-list>

效果如下

附實(shí)例代碼:github link

總結(jié)

其實(shí)作用域插槽很類(lèi)似于入?yún)⒑瘮?shù),組件相當(dāng)于cb,而cb的入?yún)⒕拖喈?dāng)與slotProps接收的參數(shù),只不過(guò)名稱(chēng)和形式變了個(gè)樣子。

<!-- 函數(shù) -->
function foo(str,cb){
 var msg = str + '你好';
 cb(msg);
}
<!-- 調(diào)用 -->
foo('愚坤',function(msg){
 alert(msg)
})

foo('愚坤',function(msg){
 console.log(msg)
})

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 從Vue到Postman全面驗(yàn)證API接口跨域問(wèn)題解決

    從Vue到Postman全面驗(yàn)證API接口跨域問(wèn)題解決

    我們都知道跨域是同源策略導(dǎo)致的,域名不同、協(xié)議不同、端口號(hào)不同任意一種情況都會(huì)導(dǎo)致跨域,這篇文章主要介紹了從Vue到Postman全面驗(yàn)證API接口跨域問(wèn)題,需要的朋友可以參考下
    2024-08-08
  • Vue項(xiàng)目中引入 ECharts

    Vue項(xiàng)目中引入 ECharts

    這篇文章主要介紹了Vue項(xiàng)目中引入 ECharts,ECharts是一個(gè)強(qiáng)大的畫(huà)圖插件,在vue項(xiàng)目中,我們常??梢砸肊charts來(lái)完成完成一些圖表的繪制;以下介紹vue項(xiàng)目中引用并使用ECharts,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2021-12-12
  • vue-music關(guān)于Player播放器組件詳解

    vue-music關(guān)于Player播放器組件詳解

    這篇文章主要為大家詳細(xì)介紹了vue-music關(guān)于Player播放器組件的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 詳解Vue3-pinia狀態(tài)管理

    詳解Vue3-pinia狀態(tài)管理

    這篇文章主要介紹了Vue3-pinia狀態(tài)管理,pinia是?vue3?新的狀態(tài)管理工具,簡(jiǎn)單來(lái)說(shuō)相當(dāng)于之前?vuex,它去掉了?Mutations?但是也是支持?vue2?的,需要的朋友可以參考下
    2022-08-08
  • vue使用npm發(fā)布自己的公網(wǎng)包

    vue使用npm發(fā)布自己的公網(wǎng)包

    本文主要介紹了vue使用npm發(fā)布自己的公網(wǎng)包,通過(guò)創(chuàng)建一個(gè)簡(jiǎn)單的npm包,本文詳細(xì)闡述了從創(chuàng)建到發(fā)布的整個(gè)過(guò)程,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • Vue計(jì)算屬性與監(jiān)視屬性實(shí)現(xiàn)方法詳解

    Vue計(jì)算屬性與監(jiān)視屬性實(shí)現(xiàn)方法詳解

    最近在學(xué)習(xí)vue,學(xué)習(xí)中遇到了一些感覺(jué)挺重要的知識(shí)點(diǎn),感覺(jué)有必要整理下來(lái),這篇文章主要給大家介紹了關(guān)于Vue.js中計(jì)算屬性、監(jiān)視屬性的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • vue如何關(guān)閉eslint檢測(cè)(多種方法)

    vue如何關(guān)閉eslint檢測(cè)(多種方法)

    我們?cè)陂_(kāi)發(fā)vue項(xiàng)目的時(shí)候,創(chuàng)建的時(shí)候可能會(huì)不小心選擇了eslint,所以如果不想讓eslint檢測(cè),我們?cè)撛趺崔k呢,本文就詳細(xì)的介紹了幾種關(guān)閉方法,感興趣的可以了解一下
    2021-12-12
  • vue3.0搭配.net core實(shí)現(xiàn)文件上傳組件

    vue3.0搭配.net core實(shí)現(xiàn)文件上傳組件

    這篇文章主要介紹了vue3.0搭配.net core實(shí)現(xiàn)文件上傳組件,幫助大家開(kāi)發(fā)Web應(yīng)用程序,完成需求,感興趣的朋友可以了解下
    2020-10-10
  • 如何利用vite快速搭建vue3項(xiàng)目

    如何利用vite快速搭建vue3項(xiàng)目

    這篇文章主要介紹了如何利用vite快速搭建vue3項(xiàng)目問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 淺談一下Vue生命周期中mounted和created的區(qū)別

    淺談一下Vue生命周期中mounted和created的區(qū)別

    每一個(gè)vue實(shí)例從創(chuàng)建到銷(xiāo)毀的過(guò)程,就是這個(gè)vue實(shí)例的生命周期,在這個(gè)過(guò)程中,他經(jīng)歷了從開(kāi)始創(chuàng)建、初始化數(shù)據(jù)、編譯模板、掛載Dom、渲染→更新→渲染、卸載等一系列過(guò)程,那么這些過(guò)程中,具體vue做了些啥,我們今天來(lái)了解一下
    2023-05-05

最新評(píng)論