国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

父子組件傳值及v-model實(shí)現(xiàn)通信

lwx12525 / 2865人閱讀

摘要:子組件也屬于當(dāng)前實(shí)例。監(jiān)聽鉤子函數(shù)的場景使用的不多,但是還是要知道的。可以獲取到父組件傳遞的除和外的所有自定義屬性。

一. 父組件向子組件傳值

創(chuàng)建parent和child組件,并在parent中注冊child組件

在父組件調(diào)用子組件標(biāo)簽中添加一個(gè)自定義屬性(msg),

    
    

在子組件的props中將parent中自定義的屬性(msg)添加進(jìn)去,然后就可以像data中定義的屬性一樣使用

    
    
二. 子組件向父組件傳值

在父組件中的子標(biāo)簽中監(jiān)聽該自定義事件(listenChildEvent)并添加一個(gè)響應(yīng)該事件的處理方法(acceptMsgFromChild)

    
    

在子組件中創(chuàng)建一個(gè)按鈕,給按鈕綁定一個(gè)點(diǎn)擊事件

在響應(yīng)該點(diǎn)擊事件的函數(shù)(sendMsgToParent)中使用$emit來觸發(fā)父組件的自定義事件(listenChildEvent),并傳遞一個(gè)參數(shù)

    
    
三. 父子組件使用v-model實(shí)現(xiàn)組件通信

我們在使用別人的組件庫的時(shí)候,經(jīng)常是通過v-model來控制一個(gè)組件顯示和隱藏的效果,例如:彈框,下面一步一步的解開v-model的什么面紗
提到v-model首先想到的就是我們對于表單用戶數(shù)據(jù)的雙向數(shù)據(jù)綁定,操作起來很簡潔很粗暴,例如:



data () {            
    return {                
        msg: ""            
    }        
}

其實(shí)v-model是個(gè)語法糖,上面這一段代碼和下面這一段代碼是一樣的效果:


data () {
    return {
        msg: "" 
    }        
}

由此可以看出,v-model="msg"實(shí)則是 :value="msg" @input="msg = $event.target.value"的語法糖。這里其實(shí)就是監(jiān)聽了表單的input事件,然后修改:value對應(yīng)的值。除了在輸入表單上面可以使用v-model外,在組件上也是可以使用的,這點(diǎn)官網(wǎng)有提到,但是介紹的不是很詳細(xì),導(dǎo)致剛接觸的小伙伴會有一種云里霧里不知所云的感覺。既然了解了v-model語法糖本質(zhì)的用法,那么我們就可以這樣實(shí)現(xiàn)父子組件的雙向數(shù)據(jù)綁定:

以上原理實(shí)現(xiàn)方法,寫法1:

父組件用法:

子組件寫法:

// 點(diǎn)擊該按鈕觸發(fā)父子組件的數(shù)據(jù)同步


// 接收父組件傳遞的value值
// 注意,這種實(shí)現(xiàn)方法,這里只能使用value屬性名
props: {            
    value: {                
        type: Boolean,                
        default: false            
    }        
},
methods: {            
    confirm () {                
        // 雙向數(shù)據(jù)綁定父組件:value對應(yīng)的值 
        // 通過$emit觸發(fā)父組件input事件,第二個(gè)參數(shù)為傳遞給父組件的值,這里傳遞了一個(gè)false值 
        // 可以理解為最上面展示的@input="msg = $event.target.value"這個(gè)事件
        // 即觸發(fā)父組件的input事件,并將傳遞的值‘false’賦值給msg             
        this.$emit("input", false)            
    }        
}

這種方式實(shí)現(xiàn)了父子組件見v-model雙向數(shù)據(jù)綁定的操作,例如你可以試一下實(shí)現(xiàn)一個(gè)全局彈窗組件的操作,通過v-model控制彈窗的顯示隱藏,因?yàn)槟阋陧撁鎯?nèi)進(jìn)行某些操作將他顯示出來,控制其隱藏的代碼是寫在組件里面的,當(dāng)組件隱藏了對應(yīng)的也要父組件對應(yīng)的值改變。

以上這種方式實(shí)現(xiàn)的父子組件的v-model通信,雖可行,但限制了我們必須popos接收的屬性名為value和emit觸發(fā)的必須為input,這樣就容易有沖突,特別是在表單里面。所以,為了更優(yōu)雅的使用v-model通信而解決沖突的問題,我們可以通過在子組件中使用model選項(xiàng),下面演示寫法2:
父組件寫法:

子組件寫法:



// model選項(xiàng)用來避免沖突
// prop屬性用來指定props屬性中的哪個(gè)值用來接收父組件v-model傳遞的值
// 例如這里用props中的show來接收父組件傳遞的v-model值
// event:為了方便理解,可以簡單理解為父組件@input的別名,從而避免沖突
// event的值對應(yīng)了你emit時(shí)要提交的事件名,你可以叫aa,也可以叫bb,但是要命名要有意義哦!!!
model: {            
    prop: "show",            
    event: "changed"        
},
props: {
    // 由于model選項(xiàng)中的prop屬性指定了,所以show接收的是父組件v-model傳遞的值            
    show: {                
        type: Boolean,                
        default: false            
    }        
},        
methods: {            
    confirm () {                
        // 雙向數(shù)據(jù)綁定父組件傳遞的值
        // 第一個(gè)參數(shù),對應(yīng)model選項(xiàng)的event的值,你可以叫aa,bbb,ccc,起名隨你 
        this.$emit("changed", false)            
    }        
}

這種實(shí)現(xiàn)父子組件見v-model綁定值的方法,在我們開發(fā)中其實(shí)是很常用的,特別是你要封裝公共組件的時(shí)候。
最后,實(shí)現(xiàn)雙向數(shù)據(jù)綁定的方式其實(shí)還有.sync,這個(gè)屬性一開始是有的,后來由于被認(rèn)為或破壞單向數(shù)據(jù)流被刪除了,但最后證明他還是有存在意義的,所以在2.3版本又加回來了。

例如:父組件:



data () {
    return {
        msg: ""
    }
}


props: {            
    oneprop: {                
        type: String,                
        default: "hello world"
    }        
},        
methods: {            
    changeMsg () {                
        // 雙向數(shù)據(jù)流
        this.$emit("update:msg", "helow world")           
    }        
}        

這樣,便可以在子組件更新父組件的數(shù)據(jù)。由于v-model只使用一次,所以當(dāng)需要雙向綁定的值有多個(gè)的時(shí)候,.sync還是有一定的使用場景的。.sync是下面這種寫法的語法糖,旨在簡化我們的操作:

掌握了組件的v-model寫法,在封裝一些公共組件的時(shí)候就又輕松一些了吧。
這里再提一下:

m.$emit(event ,[...args])這個(gè)api,其主要作用就是用來觸發(fā)當(dāng)前實(shí)例上的事件。附加參數(shù)都會傳給監(jiān)聽器回調(diào)。子組件也屬于當(dāng)前實(shí)例。第一個(gè)參數(shù):要觸發(fā)的事件名稱。后續(xù)的參數(shù)可選:即作為參數(shù)傳遞給要觸發(fā)的事件。文檔

監(jiān)聽當(dāng)前實(shí)例上的自定義事件,事件可以有$emit觸發(fā),也能通過hook監(jiān)聽到鉤子函數(shù)

vm.$on( event, callback ):一直監(jiān)聽;文檔

vm.$once( event, callback ):監(jiān)聽一次;文檔

vm.$off( [event, callback] ):移除監(jiān)聽;文檔
監(jiān)聽$emit觸發(fā)的自定義事件,上面已經(jīng)有過用法了,監(jiān)聽鉤子函數(shù),在上面的定時(shí)器那塊也有演示到。監(jiān)聽鉤子函數(shù)的場景使用的不多,但是還是要知道的。

vm.$attrs:可以獲取到父組件傳遞的除class和style外的所有自定義屬性。

vm.$listeners:可以獲取到父組件傳遞的所有自定義事件

例如:父組件:

就可以在子組件中獲取父組件傳遞的屬性和事件,而不用在props中定義。子組件簡單演示如下:

created() {            
    const msg = this.$attrs.msg; // 獲取父組件傳遞的msg
    this.$listeners.confirm && this.$listeners.confirm(); //若組件傳遞事件confirm則執(zhí)行
},

這在我們寫一些高級組件時(shí)候,會有用到的。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/104263.html

相關(guān)文章

  • Vue父子組件通信的三兩事(prop、emit)

    摘要:的單向數(shù)據(jù)傳遞直接作為一個(gè)本地變量下面是我的子組件這是父組件給我傳的數(shù)據(jù)運(yùn)行結(jié)果如下圖子組件向父組件傳遞數(shù)據(jù)基本使用子組件向父組件傳遞數(shù)據(jù),不能像上面一樣實(shí)時(shí)的傳遞數(shù)據(jù),必須通過事件觸發(fā)。 組件是Vue核心功能之一,合理的組件化,可以減少我們代碼的冗余,提高項(xiàng)目的可維護(hù)性。下面,我將由淺入深的講Vue的組件在講之前,首先我們先了解一下組件的命名。 HTML是對特征名不敏感的語言,他...

    darcrand 評論0 收藏0
  • 巧妙運(yùn)用v-model實(shí)現(xiàn)父子組件傳值

    摘要:如何巧妙利用實(shí)現(xiàn)父子組件傳值通常子組件某個(gè)變量更新,并需要告知父組件時(shí),需要子組件觸發(fā)事件并父組件監(jiān)聽該事件。但是熟悉上面的實(shí)現(xiàn)原理后,我們可以巧妙地運(yùn)用這一原理在內(nèi)部使用不同的屬性為不同的輸入元素并拋出不同的事件。 v-model介紹 熟悉Vue的小伙伴們都知道 v-model 是Vue的一個(gè)很大的特色,可以實(shí)現(xiàn)雙向數(shù)據(jù)綁定。但本質(zhì)上呢,它不過是語法糖,它負(fù)責(zé)監(jiān)聽用戶的輸入事件以更新...

    張金寶 評論0 收藏0
  • 微信小程序之購物車和父子組件值及calc的注意事項(xiàng)

    摘要:在做微信小程序時(shí),覺得小組里對購物車的實(shí)現(xiàn)不是很完美,就自己嘗試的寫了下,然后用到了父子組件傳值,父子組件傳值的話,和框架上是非常相似的,以及這個(gè)函數(shù),有個(gè)注意點(diǎn),自己不怎么用,一時(shí)間有差點(diǎn)忘了,這里記錄下效果圖子組件實(shí)現(xiàn)要實(shí)現(xiàn)圖中刪除的效 在做微信小程序時(shí),覺得小組里對購物車的實(shí)現(xiàn)不是很完美,就自己嘗試的寫了下,然后用到了父子組件傳值,父子組件傳值的話,和vue框架上是非常相似的,以...

    helloworldcoding 評論0 收藏0
  • vue總結(jié)系列--組件

    摘要:觸發(fā)事件可以攜帶數(shù)據(jù),這些數(shù)據(jù)被用于傳遞給綁定了事件的其它組件的回調(diào)函數(shù)上,進(jìn)而被傳遞給其它組件。父組件可以在回調(diào)函數(shù)里做任何事情,頗有靈活性。一般情況下,父組件會在回調(diào)函數(shù)中更新自己的狀態(tài)數(shù)據(jù)。 上一篇博文梳理了vue的數(shù)據(jù)驅(qū)動和響應(yīng)式相關(guān)的特性,這一篇博文就來梳理vue的一個(gè)很重要的特性,組件化。自定義組件之于vue,其意義不亞于函數(shù)之于C,java之類的編程語言。函數(shù)是計(jì)算機(jī)科學(xué)...

    cuieney 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<