日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Vue 組件復用多次自定義參數(shù)操作

瀏覽:18日期:2022-12-27 10:51:25

場景:

當項目中多處出現(xiàn)相同的模塊時,此時的正常考慮是將其做成公共組建,通過傳參不同,實現(xiàn)多處復用

具體:

背景:項目使用的技術是VUE+ElementUI

此處,多處出現(xiàn)的模塊是select選擇框,封裝成組件后,傳給它option的值,代碼如下:

<!--組件文件 比如說這個組件叫 vSelect 下面會用--><template> <el-select @change='handleChange' v-model='value' :placeholder='請選擇'> <el-option v-for='(item,index) in options' :key='index' :label='item.label' :value='item.value'> </el-option> </el-select></template><script> export default { data() { return { value: ’’, } }, props:[’options’], methods: { handleChange(value) { this.$emit(’my-event’,value); } }, }</script>

使用時只需把文件import進來,代碼如下:

<template> <vSelect :options='options' @my-event='select'></vSelect></template><script> import vSelect from ’文件路徑’ export default { data() { return {options: [ { value:0, label:’選項一’ }, { value:1, label:’選項二’ },], } }, components: { vSelect }, methods: { select(value) {console.log(value) } }, }</script>

以上的話便可以實現(xiàn)一個組件的簡單調用,選擇后的值會從子組件傳到父組件

問題:

多處使用同一個組件時,會代表不同的選項,拿到的值也需要做不同的處理,正常也可以通過寫多個方法來實現(xiàn)對取得的值的不同處理,但是這種方法不夠靈活。

解決:

此時自然而然想到的一種解決方法就是給上面的select函數(shù)再增加一個參數(shù),根據(jù)參數(shù)不同進行不同的處理

但是真正實施起來卻發(fā)現(xiàn)會出現(xiàn)很多問題。

其實解決方法很簡單,就是一開始沒轉過來彎,還是花了一些時間,最終的解決方案就是使用回調函數(shù):

<vSelect :options='options' @my-event='val=>select(val,param)'></vSelect>select(value,param) { console.log(value,param)}

回過頭來看,真的覺的這個壓根都不能算作一個問題,就當記錄一下作為Vue組件使用的初級教程吧,希望能夠幫助到一些人。

補充知識:VUE之組件(插槽slot與可復用組件)

插槽slot

當子組件部分內容是通過父組件傳遞DOM進行顯示時,可以不用父組件props傳值的比較挫的語法,Vue中提供了一種新型語法:插槽slot。

廢話不多說看代碼:

<!-- html代碼 --> <div id='app'> <my-blog> <h2>格林童話</h2> <cite>格林兄弟</cite> <p>白雪公主和七個小矮人</p> </my-blog> </div>// vue代碼 Vue.component(’my-blog’,{ template:` <div> <slot></slot> <span>惡毒的皇后</span> </div>` }) var app=new Vue({ el:'#app', })

命名由來:

這種語法看起來像是用子組件直接往里直接插DOM內容,所以稱之為插槽。

小結:

1、插槽(Slot)是Vue提出來的一個概念,正如名字一樣,插槽用于決定將所攜帶的內容,插入到指定的某個位置,從而使模板分塊,具有模塊化的特質和更大的重用性;

2、插槽顯不顯示、怎樣顯示是由父組件來控制的,而插槽在哪里顯示就由子組件來進行控制

插槽分類有很多種,本節(jié)將一一介紹

(1)單個插槽/默認插槽

(2)具名插槽

(3)作用域插槽

(4)解構插槽

插槽分類一:單個插槽(備胎插槽)

出現(xiàn)緣由:

最初在 標簽中的任何內容都被視為備用內容。

備用內容在子組件的作用域內編譯,并且只有在宿主元素為空,且沒有要插入的內容時才顯示備用內容。

插槽分類一:單個插槽(備胎)

(1)宿主元素不為空時,顯示宿主元素里內容,不顯示備用內容

<!-- html代碼 --> <div id='app'> <my-blog></my-blog> </div>// vue代碼 Vue.component(’my-blog’,{ template:` <div> <slot>備用內容</slot> <span>惡毒的皇后</span> </div>` }) var app=new Vue({ el:'#app', })

注意:此時上面沒有內容的情況下會自動填上默認的內容

官方文檔描述:

Vue 實現(xiàn)了一套內容分發(fā)的 API,將 元素作為承載分發(fā)內容的出口

插槽內可以包含任何模板代碼,包括 HTML模板代碼,甚至可以是其它的組件。

通俗理解:

沒有插槽的情況下在組件標簽內寫一些內容是不起任何作用的,當在組件中聲明了插槽元素后,在組件元素內寫的內容就會跑到它這里了,即插槽此時充當承載分發(fā)內容的出口!

具名插槽

首先看個案例,結合案例了解下具名插槽的概念

(1)在子組件中定義了三個slot標簽,其中有兩個分別添加了name屬性header和footer。即通過給slot添加name屬性,來指定當前slot的名字

<!-- html代碼 --> <div id='app'> <my-blog> <h2 slot='header'>格林童話</h2> <cite>格林兄弟</cite> <p slot='footer'>白雪公主和七個小矮人</p> </my-blog> </div>// vue代碼 Vue.component(’my-blog’,{ template:` <div> <slot name='header'></slot> <span>惡毒的皇后</span> <slot></slot> <slot name='footer'></slot> </div>` }) var app=new Vue({ el:'#app', })

具名插槽小結

(1)具名插槽其實就是在父組件中添加一個 slot=‘自定義名字’ 的屬性,然后在子組件中的 里面添加 name=‘自定義名字’ 即可

(2)如果父組件中有一部分沒有添加 slot 屬性,則此處就是默認的插槽,在子組件中的 直接就是使用的父組件的默認插槽部分

(3)如果沒有默認插槽,這些找不到匹配的內容片段將被拋棄。

作用域插槽slot

簡介:

作用域插槽為Vue2.1.0版本新增,是一種特殊類型的插槽,用作一個 (能被傳遞數(shù)據(jù)的) 可重用模板,來代替已經渲染好的元素。

父組件模板的所有東西都會在父級作用域內編譯;子組件模板的所有東西都會在子級作用域內編譯。

不過,我們可以在父組件中使用 slot-scope 特性從子組件獲取數(shù)據(jù)。前提是需要在子組件中使用 :data=data 先傳遞 data 的數(shù)據(jù)。

作用域插槽案例:

<!-- html代碼 --> <div id='app'> <!-- 利用solt-scope獲取數(shù)據(jù) --> <my-blog> <template slot-scope='props'> {{props.data}} </template> </my-blog> </div> // vue代碼 // 1.子組件傳遞數(shù)據(jù) Vue.component(’my-blog’, { template: `<div> <slot :data='text'></slot> </div>`, data() { return { text: ’喜歡福安’ } } }) var app = new Vue({ el: '#app', })

注意:

(1)在父級中,具有特殊特性 slot-scope 的 元素必須存在,表示它是作用域插槽的模板(在 2.5.0+,slot-scope 能被用在任意元素或組件中而不再局限于 )。

(2)slot-scope 的值將被用作一個臨時變量名,此變量接收從子組件傳遞過來的 prop 對象

(3)在子組件中,只需將數(shù)據(jù)傳遞到插槽,就像你將 prop 傳遞給組件一樣,接下來父組件中使用 slot-scope 特性從子組件獲取數(shù)據(jù)

案例:blog子組件可能在很多地方調用,希望在不同地方調用blog組件時

但是:注意這里要求列表的循環(huán)和樣式不是由子組件決定,而是外部決定的,修改代碼如下

<!-- html代碼 --> <div id='app'> <!-- 利用solt-scope獲取數(shù)據(jù) --> <my-blog> <template slot-scope='props'> <h1>{{props.data}}</h1> </template> </my-blog> <my-blog> <template slot-scope='props'> <h4>{{props.data}}</h4> </template> </my-blog> </div>// vue代碼 // 1.子組件傳遞數(shù)據(jù) Vue.component(’my-blog’, { template: ` <div> <ul> <li v-for='text of texts'> <slot :data='text'></slot> </li> </ul> </div>`, data() { return { texts: ['汪汪隊','彩虹寶寶','天線寶寶','蘇菲亞','大頭兒子小頭爸爸','熊出沒'] } } }) var app = new Vue({ el: '#app', })

條件判斷渲染

到目前為止,便可以在元素上隨便操作了

例如:當名字長度等于3的時候,在前面加個“你好”標志

代碼如下

<!-- html代碼 --> <div id='app'> <!-- 利用solt-scope獲取數(shù)據(jù) --> <my-blog> <template slot-scope='props'> <h1 v-if='props.data.length==3'>新推薦--{{props.data}}</h1> <h1 v-else>{{props.data}}</h1> </template> </my-blog> </div> // vue代碼 // 1.子組件傳遞數(shù)據(jù) Vue.component(’my-blog’, { template: ` <div> <ul> <li v-for='text of texts'> <slot :data='text'></slot> </li> </ul> </div>`, data() { return { texts: ['汪汪隊','彩虹寶寶','天線寶寶','蘇菲亞','大頭兒子小頭爸爸','熊出沒'] } } }) var app = new Vue({ el: '#app', })

作用域插槽slot-scrop新語法

版本:自 2.6.0 起有所更新,已廢棄使用 slot-scope 語法,開始使用v-slot進行替代,如下所示

<!-- html代碼 --> <div id='app'> <!-- 利用solt-scope獲取數(shù)據(jù) --> <my-blog> <template v-slot='props'> <h1 v-if='props.data.length==3'>新推薦--{{props.data}}</h1> <h1 v-else>{{props.data}}</h1> </template> </my-blog> </div>

解構插槽:

v-slot 的值實際上可以是任何能夠作為函數(shù)定義中的參數(shù)的 JS表達式。所以在支持的環(huán)境下 (單文件組件或現(xiàn)代瀏覽器),你也可以使用 ES2015 解構來傳入具體的插槽 prop,如下:

<!-- html代碼 --> <div id='app'> <!-- 利用solt-scope獲取數(shù)據(jù) --> <my-blog> <template v-slot='{data}'> <h1 v-if='data.length==3'>新推薦--{{data}}</h1> <h1 v-else>{{data}}</h1> </template> </my-blog> </div>// vue代碼 // 1.子組件傳遞數(shù)據(jù) Vue.component(’my-blog’, { template: ` <div> <ul> <li v-for='text of texts'> <slot :data='text'></slot> </li> </ul> </div>`, data() { return { texts: ['汪汪隊','彩虹寶寶','天線寶寶','蘇菲亞','大頭兒子小頭爸爸','熊出沒'] } } }) var app = new Vue({ el: '#app', })

作用域插槽slot-scrop新語法

你甚至可以定義后備內容,用于插槽 prop 是 undefined 的情形

<!-- html代碼 --> <div id='app'> <!-- 利用solt-scope獲取數(shù)據(jù) --> <my-blog> <template v-slot='{data=’這部電視禁播了’}'> <h1 v-if='data.length==3'>新推薦--{{data}}</h1> <h1 v-else>{{data}}</h1> </template> </my-blog> </div>// vue代碼 // 1.子組件傳遞數(shù)據(jù) Vue.component(’my-blog’, { template: ` <div> <ul> <li v-for='text of texts'> <slot :data='text'></slot> </li> </ul> </div>`, data() { return { texts: ['汪汪隊','彩虹寶寶','天線寶寶','蘇菲亞',undefined,'熊出沒'] } } }) var app = new Vue({ el: '#app', })

編寫可復用組件注意事項:

在編寫組件時,最好考慮好以后是否要進行復用。一次性組件間有緊密的耦合沒關系,但是可復用組件應當定義一個清晰的公開接口,同時也不要對其使用的外層數(shù)據(jù)作出任何假設。

Vue 組件的 API 來自三部分——prop、事件和插槽:

1、Prop 允許外部環(huán)境傳遞數(shù)據(jù)給組件;

2、事件允許從組件內觸發(fā)外部環(huán)境的副作用;

3、插槽允許外部環(huán)境將額外的內容組合在組件中。

以上這篇Vue 組件復用多次自定義參數(shù)操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
成人精品天堂一区二区三区| 91成人精品视频| 伊人久久婷婷| 国产真实久久| 中文国产一区| 久久99伊人| 亚洲欧美专区| 国产日韩中文在线中文字幕 | 欧美日韩亚洲三区| 久久国产三级| 成人在线超碰| 成人影视亚洲图片在线| 日本在线精品| 欧美aa国产视频| 亚洲免费一区三区| 欧美国产先锋| 日韩国产在线| 中文欧美日韩| 91精品麻豆| 久久久精品国产**网站| 国产精品乱战久久久| 欧美日韩视频网站| 亚洲免费在线| 色爱综合网欧美| 亚洲欧美日韩视频二区| 麻豆精品视频在线观看| 精品捆绑调教一区二区三区| 一区二区国产在线观看| 久久伊人久久| 一区福利视频| 日韩av二区| 日韩欧美在线精品| 亚洲综合在线电影| 亚洲资源网站| 夜鲁夜鲁夜鲁视频在线播放| 亚洲五月综合| 欧美成a人免费观看久久| 视频一区日韩| 久久精品观看| 日韩精品一区二区三区中文在线| 日韩欧美一区二区三区在线观看| 欧美在线网站| 国产成人精品一区二区三区视频 | 美女免费视频一区| 视频一区二区三区入口| 高清av一区| 国产精品极品| 日韩黄色免费网站| 国产偷自视频区视频一区二区| 久久久国产精品网站| 日本成人手机在线| 亚洲人成在线影院| 日韩在线卡一卡二| 日本精品影院| av高清不卡| 久久影院午夜精品| 国产精品毛片一区二区在线看| 国产精品久久777777毛茸茸| 亚洲欧洲午夜| 激情欧美亚洲| 亚洲精品网址| 1024精品久久久久久久久| 国内精品福利| 国产精品嫩草99av在线| 亚洲一区不卡| 久久亚洲视频| 亚洲三级精品| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲国产一区二区三区在线播放| 日韩免费一区| 极品裸体白嫩激情啪啪国产精品| 日韩成人三级| 亚洲午夜精品久久久久久app| 99久久夜色精品国产亚洲狼 | 精品视频网站| 日韩欧美国产精品综合嫩v| 亚洲先锋成人| 日韩一区精品| 久久麻豆视频| 国产精品精品国产一区二区| 欧美天堂视频| 欧美手机在线| 日韩欧美精品一区二区综合视频| 国产欧美日韩精品一区二区三区| 免费在线日韩av| 捆绑调教日本一区二区三区| 伊人久久亚洲美女图片| 国产情侣久久| 午夜影院欧美| 久久久精品国产**网站| 欧美午夜不卡| 嫩呦国产一区二区三区av| 亚洲激情五月| 国产91在线播放精品| 久久在线电影| 嫩草伊人久久精品少妇av杨幂| 超碰超碰人人人人精品| 亚洲一区二区av| 日韩大片在线播放| 啪啪亚洲精品| 久久精品国产大片免费观看| 国产亚洲精品精品国产亚洲综合 | 中文字幕av一区二区三区人| 成人欧美一区二区三区的电影| 一区二区三区四区在线观看国产日韩| 免费在线成人| 亚洲毛片一区| 国产真实久久| 最近高清中文在线字幕在线观看1| 亚洲一区二区三区高清| 久久99国产精品视频| 在线综合欧美| 亚洲爱爱视频| 免费观看亚洲天堂| 午夜电影一区| 综合视频一区| 国产精品视区| 欧美日韩国产综合网| 中文字幕人成乱码在线观看| 久久精品三级| 老牛国内精品亚洲成av人片| 91午夜精品| 88久久精品| 久久激情av| 亚洲一区有码| 国产模特精品视频久久久久| 午夜久久一区| 欧美日韩国产免费观看| 伊伊综合在线| 999国产精品永久免费视频app| 涩涩av在线| 久久久9色精品国产一区二区三区| 麻豆视频在线看| 亚洲韩日在线| 蜜桃av一区| 日韩高清一级| 国产精品久久久久久久久久妞妞 | 欧美亚洲三区| 国产精品久久| 黄色aa久久| 国产精品视区| 久久国内精品自在自线400部| 亚洲一区有码| 国产精品欧美日韩一区| 日本а中文在线天堂| 久久在线免费| 日韩精品亚洲专区在线观看| 欧美国产免费| 天堂网av成人| 亚洲一二三区视频| 国产精品色在线网站| 精品视频网站| 99久久精品网站| 久久激情五月激情| 亚洲高清久久| 欧美一区=区三区| 日韩欧美一区二区三区免费看| 91久久在线| 精品视频在线观看网站| 国产免费成人| 国产精品自在| 欧美在线影院| 国产91在线播放精品| 久久不射中文字幕| 国产成人久久精品麻豆二区| 日韩精品一二三| 成人小电影网站| 日韩1区2区日韩1区2区| 成人午夜国产| 国产精品国产三级在线观看| 欧美二区视频| 国产乱码精品一区二区三区亚洲人 | 亚洲视频www| 日本一二区不卡| 天堂av在线一区| 老牛国内精品亚洲成av人片| 日韩制服丝袜av| 99久久激情| 91亚洲国产| 国产videos久久| 久久精品av麻豆的观看方式| 黄色成人91| 99免费精品| 国产v综合v| av中文字幕在线观看第一页| 国产激情综合| 国产日韩中文在线中文字幕 | 日韩黄色av| 日韩精品一区第一页| 亚洲天堂久久| 影视先锋久久| 99成人在线视频| 欧美va亚洲va日韩∨a综合色| 日韩1区在线| 日韩成人综合| 99热精品久久| 在线国产一区二区| 亚洲免费一区二区| 欧美特黄视频| 亚洲乱码久久|