Vue.js 元件中的v-on繫結自定義事件理解
每個 Vue 例項都實現了事件介面(Events interface),即:
使用 $on(eventName)
監聽事件
使用 $emit(eventName)
觸發事件
Vue的事件系統分離自瀏覽器的EventTarget API。儘管它們的執行類似,但是$on
和 $emit
不是addEventListener
和 dispatchEvent
的別名。
另外,父元件可以在使用子元件的地方直接用 v-on 來監聽子元件觸發的事件。
下面是一個文件上面的例子:
2017年4月11日更新
<div id="counter-event-example">
<p>{{ total }}</p>
<button-counter v-on:increment="incrementTotal" ></button-counter>
<button-counter v-on:increment="incrementTotal"></button-counter>
</div>
Vue.component('button-counter', {
template: '<button v-on:click="increment">{{ counter }}</button>',
data: function () {
return {
counter: 0
}
},
methods: {
increment: function () {
this.counter += 1
this.$emit('increment')
}
},
})
new Vue({
el: '#counter-event-example',
data: {
total: 0
},
methods: {
incrementTotal: function () {
this.total += 1
}
}
})
跟著這個例子我來談談理解,更新以前我那種錯誤的思想
先畫出理解的步驟,跟著步驟來進行理解
步驟1:
大家先看到這裡,其實在步驟4裡面的自定義標籤經過渲染之後是變成了如 步驟一 一樣的程式碼,所以我們應該從這裡入手理解父子元件間事件繫結。在子元件裡面把點選事件(click)繫結給了函式increment(即圖片裡面的步驟2),這裡容易理解,即點選了子元件的按鈕將會觸發位於子元件的increment函式
步驟2與步驟3:
increment函式被觸發執行,在步驟2裡面執行了一句呼叫函式的語句
this.$emit('increment')
我們來看一下文件
vm.$emit( event, […args] ) : 觸發當前例項上的事件。附加引數都會傳給監聽器回撥
在這裡是什麼意思呢?按我自己的大白話就是這樣說的:
通過這句函式可以讓父元件知道子元件呼叫了什麼函式,this.$emit(‘increment’) 即類似於子元件跟父元件說了一聲“hi,爸爸 我呼叫了我自己的increment函式”,通知父元件
步驟4:
回看一下在父元件裡面定義的自定義標籤,可以看到
v-on:increment="incrementTotal"
什麼意思呢?我們還是用大白話來解釋一下
就是說“孩子,當你呼叫了increment函式的時候,我將呼叫incrementTotal函式來回應你”
這時我們回想步驟3,在子元件我們已經使用emit來進行通知,所以,這樣就形成父子元件間的相互呼應傳遞資訊,其實在開發的過程中父子元件通訊也都是使用這樣的方法,父元件傳遞資訊給子元件的時候會通過props引數,通常不會直接在子元件中修改父元件傳遞下來的資訊,而且通過這樣的一個鉤子去通知父元件對某些引數進行改變
步驟5:
這個就容易理解了,上一版本是本人在初學的時候寫的所以思維很不嚴謹,抱歉,歡迎大家指導批評
相關推薦
Vue.js 元件中的v-on繫結自定義事件理解
每個 Vue 例項都實現了事件介面(Events interface),即: 使用 $on(eventName) 監聽事件 使用 $emit(eventName) 觸發事件 Vue的事件系統分離自瀏覽器的EventTarget API。儘管它們的執行類似,
vue2.0中v-on繫結自定義事件
vue中父元件通過prop傳遞資料給子元件,而想要將子元件的資料傳遞給父元件,則可以通過自定義事件的繫結。 每個 Vue 例項都實現了事件介面,即: 使用 $on(eventName) 監聽事件 使用 $emit(eventName) 觸發事
vue2.0中v-on綁定自定義事件的理解
按鈕 自定義事件 監聽器 code 自定義 pre strong 數據 解耦 vue中父組件通過prop傳遞數據給子組件,而想要將子組件的數據傳遞給父組件,則可以通過自定義事件的綁定。 每個Vue實例都實現了【事件接口】,即: 1、使用 $on(eventName) 監聽事
vue.js v-model雙向資料繫結, vue.js form表單資料繫結
vue.js v-model雙向資料繫結, vue.js form表單資料繫結 ================================ ©Copyright 蕃薯耀 2018年11月29日 http://fanshuyao.iteye.com/ &l
Vue.js學習筆記:屬性繫結 v-bind
v-bind 主要用於屬性繫結,Vue官方提供了一個簡寫方式 :bind,例如: <!-- 完整語法 --> <a v-bind:href="url"></a> <!-- 縮寫 --> <a :href="url"
vue.js學習筆記之屬性繫結 v-bind
vue.js中有許多的指令,其中屬性繫結的是v-bind。 v-bind可以繫結src,style,class 一、地址繫結 HTML程式碼: <body> <div id=
vue.js和angular雙向資料繫結的實現原理
一、vue雙向資料繫結 1、原理 資料劫持: vue.js 是採用資料劫持結合釋出者-訂閱者模式的方式,通過Object.defineProperty()來劫持各個屬性的setter,getter,在資料變動時釋出訊息給訂閱者,觸發相應的監聽回撥。 2、實現步驟 要實現mv
Vue某些情況下 v-model繫結資料不實時更新解決辦法
有的時候我們變化data內的內容,console.log列印的時候是顯示已經變化了的,但並沒有渲染到介面上去。受 ES5 的限制,Vue.js 不能檢測到物件屬性的新增或刪除。因為 Vue.js 在初始化例項時將屬性轉為 getter/setter,所以屬性必須
Vue.js快速上手|單向繫結與雙向繫結
概述 Vue.js 最顯著的特點就是響應式和資料驅動,也就是將Model和View進行單向繫結或者雙向繫結。單向繫結:把Model繫結到View,當我們用JavaScript程式碼更新Model時,View就會自動更新。因此,我們不需要進行額外的DOM操作,只需要進行Mod
vue.js 2.0 關於ref--繫結dom物件並獲取
v-ref、v-el 棄用 統一使用ref屬性為元素或元件新增標記,然後通過this.$refs獲取。 開始我用: <div class="menu-wrapper" ref="menu-wrapper"> 來繫結dom物
vue的思中雙向資料繫結的原理
我們在面試中經常會被問道什麼是mvc 什麼是 mvvm 還有雙向資料繫結的原理:MVC:對專案的整體把控,M代表的是資料庫中的資料,V代表的是前端的檢視層,C用於處理M和V之間進行互動的業務邏輯(業務
DevExPress控制元件中ComboBoxEdit動態繫結資料
List<string> strList = new List<string>(); //strList.Add()獲取資料後
JQuery - on繫結多個事件
一、jquery為多個選擇器繫結同一個事件 $("#start,#end").on("click",function(){ alert("The paragraph was clicked."); }); 二、多個事件繫結同一個函式 $("p").on("mouseover
jquery on繫結多個事件
一、jquery為多個選擇器繫結同一個事件 $("#start,#end").on("click",function(){ alert("The paragraph was clicked."); }); 二、多個事件繫結同一個函式
C# Combox控制元件如何繫結自定義資料
建立一個Combox控制元件為cbxSelectPilot,載入指定目錄中的檔名到cbxSelectPilot中di = new DirectoryInfo(defaultPilotParFolder); fileInfo = di.GetFiles("
8.引數繫結-自定義型別(傳智播客)
需求:自定義日期型別引數繫結 private Date itemCreateDate; 如果controller形參pojo物件的屬性中有日期型別,需要自定義引數繫結。 將請求日期資料串轉換成日期型別,要轉換的日期型別和pojo中日期屬性的型別保持一致。所以自定義引數繫結將
WPF--繫結自定義資料型別
WPF作為資料繫結的目標: 使用DataContext屬性,表示當前控制元件中的每個元素都繫結此資料: 資料型別定義: public class FamilyData { private string m_familyName; private string m_widt
自定義oracle表空間並繫結自定義使用者
建立oracle自定義的表空間和自定義使用者(PDB) 1.建立自定義表空間 建立表空間create tablespace AARONPRO //自定義的表空間名字, datafile '/opt/oracle/app/oradata/orcl/AARO
CEF3 非同步JavaScript繫結 自定義實現
https://github.com/fanfeilong/cefutil/blob/master/doc/CEF%20General%20Usage-zh-cn.md#asynchronous-javascript-bindings 在看非同步js繫結的自定義實現部分時,給出了幾個片段的程式碼
Quick-Cocos2d-x 3.3繫結自定義類至Lua(三)動手繫結自定義類至Lua
看【繫結自定義類至Lua】(二)新建專案中配製環境新建專案中配製環境,我們完美的在新建專案中完成了繫結需要的環境,接下來才是最關健的一步。繫結自定義C++類至Lua。 事實上引擎為了方便我們應對不同平臺,已經幫我們建立了不同平臺的工程專案。為了編輯程式碼方便,我