亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

組件(3):自定義事件

RebeccaZhong / 2625人閱讀

摘要:自定義事件自定義事件有能力使子組件事件觸發(fā)父組件中的動(dòng)作。它所做的只是報(bào)告自己的內(nèi)部事件,因?yàn)楦附M件可能會(huì)關(guān)心這些事件。只是這里父組件上的事件功效沒(méi)有雙向綁定中事件那么強(qiáng)大。

自定義事件

自定義事件有能力使子組件事件觸發(fā)父組件中的動(dòng)作。
那么父組件如何監(jiān)聽事件呢?可以使用指令v-on:event-name="callback"監(jiān)聽。
而子組件又是如何觸發(fā)事件的呢? 很簡(jiǎn)單,調(diào)用this.$emit(eventName)。
先來(lái)個(gè)簡(jiǎn)單例子

new Vue({
    el:"#app-1",
    methods:{
        callback:function(){
            alert("父組件監(jiān)聽到事件觸發(fā),執(zhí)行回調(diào)。")
        }
    },
    components: {
        "component-1":{
            template:"",
            methods:{
                emitor:function(){
                    console.log("111")
                    this.$emit("alert-event")
                }
            }
        }
    }
})

根據(jù)以上代碼,可以得出個(gè)事件執(zhí)行流程,基本上不管什么自定義事件都是這個(gè)流程

子組件某方法

this.$emit("event")

DOM上v-on監(jiān)聽event

父組件methods中的callback

子組件已經(jīng)和它外部完全解耦了。它所做的只是報(bào)告自己的內(nèi)部事件,因?yàn)楦附M件可能會(huì)關(guān)心這些事件。
事件負(fù)載

在事件執(zhí)行的同時(shí),子組件還可以在觸發(fā)事件的同時(shí)掛上一些負(fù)載的數(shù)據(jù),隨著事件傳遞給父組件。
使用API的第二個(gè)參數(shù)this.$emit(event, payload),具體如下。

new Vue({
    el: "#app-2",
    data: {
        message: ""
    },
    methods: {
        handleMessage: function (payload) {
            this.message = payload.message
        }
    },
    components: {
        "component-2": {
            data: function () {
                return { message: "" }
            },
            template: "
            
", methods: { sendMsg: function () { this.$emit("message", { message: this.message }) } } } } })

點(diǎn)擊發(fā)送按鈕觸發(fā)事件并把信息傳遞給父組件,可以看到還是這里同樣遵循自定義事件流程,其他都是煙霧,之多了個(gè)負(fù)載this.$emit("message", { message: this.message })

原生事件

通過(guò).native后綴還可以在子組件元素根節(jié)點(diǎn)上綁定原生事件的監(jiān)聽。

new Vue({
    el:"#app-3",
    methods:{
        todo:function(){
            alert("事件回調(diào)方法是父組件中的")
        }
    },
    components:{
        "component-3":{
            template:""
        }
    }
})

還是要千萬(wàn)注意,回調(diào)方法在父組件作用域上。

雙向綁定(.sync修飾符與update事件)

可以通過(guò)以下步驟實(shí)現(xiàn)一個(gè)雙向綁定:

在子組件VirtualDOM節(jié)點(diǎn)上,通過(guò)v-bind:prop.sync="foo"進(jìn)行數(shù)據(jù)下發(fā),這里以.sync修飾符標(biāo)注,通知父組件子組件需要進(jìn)行props的更新。

子組件通過(guò)this.$emit("update:prop",newValue)通知父組件自己需要把prop更新為一個(gè)新值newValue以子組件的data選項(xiàng)作為過(guò)渡變量

父組件會(huì)監(jiān)聽這個(gè)更新事件,從而在負(fù)載上拿到newValue,更新foo的數(shù)據(jù),并把新數(shù)據(jù)重新下發(fā)給子組件的prop

注意:這里并不是子組件props值的改變引發(fā)父組件數(shù)據(jù)的改變,而是利用子組件的data做橋梁,通過(guò)事件及其負(fù)載引起父組件的變動(dòng)。
new Vue({
    el: "#app-4",
    data: { parentMsg: "parent"s message" },
    components: {
        "component-4": {
            props: ["child_msg"],
            data: function () {
                return { inputText: this.child_msg }
            },
            template: "
                
", watch: { child_msg: function (val) { this.inputText = val }, inputText: function (val) { this.$emit("update:child_msg", val) } } } } })

父、子組件各包含一個(gè)輸入框,并且將它們綁定到自己的某data屬性上。watch子組件的該data屬性,一有輸入就觸發(fā)事件通知父組件,并payload新值。父組件通過(guò)payload更新自己的data,并通過(guò)prop將新值下發(fā)給子組件,子組件watch自己的propprop一旦變動(dòng),將新變動(dòng)賦給data

理解v-model 在input元素上使用

我們?cè)谟幂斎肟驎r(shí),會(huì)用v-model進(jìn)行雙向綁定。


等價(jià)于

具體行為:① 在inputvalue屬性上引用組件的data ② 發(fā)生oninput事件時(shí),更新組件data,從而更新value。

new Vue({
    el:"#app-6",
    data:{
        message:"Hello"
    }
})
{{message}}
在自定義事件的表單輸入組件上使用
前提:

等價(jià)于
new Vue({
    el: "#app-7",
    data: {
        price: 100
    },
    components: {
        "component-7": {
            props: ["value"],
            template: "
                
子組件Prop:【{{value}}】
", methods:{ updateValue:function(value){ value = value+"-" this.$emit("input",value) } } } }, })
父組件數(shù)據(jù):【{{price}}】

這里的流程,輸入框輸入時(shí),觸發(fā)子組件上input事件并執(zhí)行updateValue方法,方法參數(shù)為輸入框中的value(通過(guò)$emit.target.value獲?。?,方法可以先對(duì)value進(jìn)行一系列加工處理形成super_value,最后使用this.$emit("input",super_value)觸發(fā)父組件在子組件節(jié)點(diǎn)上監(jiān)聽的input事件,并將加工過(guò)的super_value負(fù)載在事件上。父組件@input="price = arguments[0]"中的arguments[0]即是這個(gè)super_value,父組件通過(guò)input的回調(diào)更新自己的data,在將data下發(fā)給子組件的value特性。

這里如果使用v-model指令,那么子組件特性value、父組件監(jiān)聽的事件input及其回調(diào)price = arguments[0], 這些都是固定的,不能變化。

此示例的執(zhí)行流程其實(shí)與雙向綁定(.sync修飾符與update事件)中的例子是一樣的。
只是這里父組件上的input事件功效沒(méi)有雙向綁定中update事件那么強(qiáng)大。

在組件上使用

在輸入框組件中已經(jīng)說(shuō)過(guò)v-model的種種限制,其中最主要的兩點(diǎn),下發(fā)的組件特性必須命名為value和父組件監(jiān)聽的只能綁定事件input,不靈活, 例如在checkbox中,我要給下發(fā)的特性取名為checked代替value,并且父組件不想監(jiān)聽@input事件,而是@change事件。

為了解決這個(gè)不靈活的問(wèn)題,可以在組件model選項(xiàng)設(shè)置propevent,如下

new Vue({
    el: "#app-9",
    data: {
        isChecked: false,
        message:"please choose this box"
    },
    components: {
        "component-9": {
            model: {
                prop: "checked",
                event: "change"
            },
            props:{
                checked:Boolean,
                value:String
            },
            template: "
", methods:{ choose:function(checked){ this.$emit("change",checked) } } } } })
特性`value`現(xiàn)在從v-model綁定中解放出來(lái)了,可自定義使用

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/52001.html

相關(guān)文章

  • 組件(3):定義事件

    摘要:自定義事件自定義事件有能力使子組件事件觸發(fā)父組件中的動(dòng)作。它所做的只是報(bào)告自己的內(nèi)部事件,因?yàn)楦附M件可能會(huì)關(guān)心這些事件。只是這里父組件上的事件功效沒(méi)有雙向綁定中事件那么強(qiáng)大。 自定義事件 自定義事件有能力使子組件事件觸發(fā)父組件中的動(dòng)作。那么父組件如何監(jiān)聽事件呢?可以使用指令v-on:event-name=callback監(jiān)聽。而子組件又是如何觸發(fā)事件的呢? 很簡(jiǎn)單,調(diào)用this.$em...

    Yangyang 評(píng)論0 收藏0
  • 【Vue原理】Event - 源碼版 之 綁定組件定義事件

    摘要:寫文章不容易,點(diǎn)個(gè)贊唄兄弟專注源碼分享,文章分為白話版和源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于版本如果你覺(jué)得排版難看,請(qǐng)點(diǎn)擊下面鏈接或者拉到下面關(guān)注公眾號(hào)也可以吧原理源碼版之綁定組件自定義事件組件 寫文章不容易,點(diǎn)個(gè)贊唄兄弟專注 Vue 源碼分享,文章分為白話版和 源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于...

    amuqiao 評(píng)論0 收藏0
  • 微信小程序(新)必備知識(shí)

    摘要:組件化開發(fā)小程序在未出現(xiàn)組件之前,要重用的話,只能簡(jiǎn)單復(fù)制粗暴黏貼組件化開發(fā)的優(yōu)勢(shì)可復(fù)用代碼分離,可維護(hù)更重要定義組件先創(chuàng)建文件夾用于存放組件,然后再創(chuàng)建組件文件夾注意組件的文件名并不是組件名,而頁(yè)面文件名是頁(yè)面名,組件名是引用時(shí)才確定的引 組件化開發(fā) 小程序在未出現(xiàn)組件之前,要重用的話,只能簡(jiǎn)單(復(fù)制)粗暴(黏貼) 組件化開發(fā)的優(yōu)勢(shì): 1、可復(fù)用(wxml/wxss/js) 2、代...

    mengera88 評(píng)論0 收藏0
  • 微信小程序定義組件(一)

    摘要:自定義組件觸發(fā)的時(shí)候。使用外部樣式表在最上方引入文件,微信小程序的路徑一個(gè)大坑,接著在引入即可。 好吧,突然發(fā)現(xiàn)學(xué)不完了,一下子,那就分開吧,由于時(shí)間太久,直接重新大致復(fù)習(xí)了一下 微信小程序自定義組件微信小程序支持自定義組件下方的目錄showImg(https://melovemingming-1253878077.cos.ap-chengdu.myqcloud.com/blog-im...

    Guakin_Huang 評(píng)論0 收藏0
  • 【Vue原理】Event - 白話版

    摘要:寫文章不容易,點(diǎn)個(gè)贊唄兄弟專注源碼分享,文章分為白話版和源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于版本如果你覺(jué)得排版難看,請(qǐng)點(diǎn)擊下面鏈接或者拉到下面關(guān)注公眾號(hào)也可以吧原理白話版事件是我最感興趣的東西之 寫文章不容易,點(diǎn)個(gè)贊唄兄弟專注 Vue 源碼分享,文章分為白話版和 源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于...

    kumfo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<