Vue中的事件綁定與解綁方式
事件綁定
基礎知識
使用場景
- 子組件==>父組件傳數據
- 在父組件中給子組件綁定自定義事件,事件的回調在父組件中。
注意事項
組件上,默認綁定的事件為自定義事件;綁定原生事件的時候需要添加 native修飾符。
- 綁定一個名為click的自定義事件:<Demo @click="test"/>
- 綁定一個click原生事件:<Demo @click.native="test"/>
v-on 綁定事件
語法
綁定事件在父組件中進行:
方法一:@事件名稱=“函數名稱”
<Demo @atguigu="test"/>?
方法二:v-on:事件名稱=“函數名稱”
<Demo v-on:atguigu="test"/>??
在methods中配置回調函數
子組件傳遞參數:
?<button @click="觸發(fā)事件函數">結構中定義觸發(fā)事件</button>? ??
觸發(fā)事件函數中使用 this.$emit("事件名稱", 參數); 傳遞參數
實例
父組件:
<template>
?
? <Student @demo="Demotest" />
? //這里demo為事件名稱 ?Demotest為函數名稱
?
</template>
?
<script>
import Student from "./Student.vue";
?
export default {
? name: "School",
? components: {
? ? Student,
? },
? methods: {
? ? Demotest(name) {
? ? ? console.log("我是父組件,我是用v-on綁定事件傳遞參數", name);
? ? },
? },
};
</script>子組件:
<template>
?
? ? <button @click="sendStudent">點我傳遞學生信息</button>
?
</template>
?
<script>
?
export default {
? name: "Student",
? data() {
? ? return {
? ? ? name: "張三",
? ? ? age: 18,
? ? };
? },
? methods: {
? ? sendStudent() {
? ? ? this.$emit("demo", this.name);
? ? ? //demo為事件名稱,對應父組件的@demo事件
? ? ? //傳遞this.named這個參數
? ? },
? },
?
};
</script>?$ref綁定事件
語法
綁定事件在父組件中進行:
<School ref= "實例名稱" ></School>
this.$refs.實例名稱.$on("觸發(fā)事件名稱", 回調函數)
子組件傳遞參數:
<button @click="觸發(fā)事件函數">結構中定義觸發(fā)事件</button>
觸發(fā)事件函數中使用 this.$emit("事件名稱", 參數); 傳遞參數
實例
父組件:
<template>
?
? ? <Student ref="student" />
? ? //student為實例名稱并非函數名稱
?
</template>
?
<script>
import Student from "./Student.vue";
export default {
? name: "School",
? components: {
? ? Student,
? },
? methods: {
? ? getStusentName(name) {
? ? ? console.log("school收到了student的名字", name);
? ? },
? },
? mounted() {
? ? ? console.log(this.$refs.student.$on("aaa", this.getStusentName));
? ? ? //student是實例名稱 ?aaa是事件名稱
? ? ? //getStusentName 是回調函數 ?此處只能在methods配置回調函數或者使用箭頭函數否則this指向會出問題
? },
};
</script>子組件:
<template>
?
? ? <button @click="sendStudentName">點我傳遞Studentname</button>
? ? //此處sendStudentName為觸發(fā)事件的函數名稱
?
</template>
?
<script>
?
export default {
? name: "Student",
? data() {
? ? return {
? ? ? name: "張三",
? ? ? age: 18,
? ? };
? },
? methods: {
? ? sendStudentName() {
? ? ? this.$emit("aaa", this.name);
? ? //aaa為事件名稱 需要對應父組件的事件名稱
? ? },
? ?
};
</script>?事件解綁
語法
- 解綁一個自定義事件:this . $off('事件名稱') //字符串形式
- 解綁多個自定義事件:this .$off([ ' 事件1', '事件2']) //數組形式
- 解綁所有自定義事件:this.$off() //無參
組件實例對象銷毀,此組件身上的自定義事件全部失效
vm 實例對象銷毀, vm的所有 組件實例對象 身上的自定義事件全部失效
實例
mounted() {? ?
? ? ? console.log(this.$refs.student.$on("aaa", this.getStusentName));??
? },
?
beforeDestroy() {? ? ?
? ? ?this.$off("aaa");?
}總結
v-on比$ref更加簡單,但是$ref更加更加靈活。不局限于函數中而是可以分布在各個位置。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
vue element中axios下載文件(后端Python)
這篇文章主要介紹了vue element中axios下載文件(后端Python)的實例代碼,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-05-05
vue2.x版本中computed和watch的使用及關聯和區(qū)別
這篇文章主要介紹了vue2.x版本中computed和watch的使用及關聯和區(qū)別,文章圍繞主題展開詳細的內容介紹,需要的小伙伴可以參考一下2022-07-07
element-ui table行點擊獲取行索引(index)并利用索引更換行順序
這篇文章主要介紹了element-ui table行點擊獲取行索引(index)并利用索引更換行順序,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02
對vue2.0中.vue文件頁面跳轉之.$router.push的用法詳解
今天小編就為大家分享一篇對vue2.0中.vue文件頁面跳轉之.$router.push的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08

