搜尋
首頁web前端Vue.js深入了解Vue元件中的自訂事件

深入了解Vue元件中的自訂事件

Apr 06, 2022 pm 08:12 PM
vue組件自訂事件

什麼是元件自訂事件?這篇文章帶大家深入了解下Vue元件中的自訂事件,聊聊自訂事件注意點,希望對大家有幫助!

深入了解Vue元件中的自訂事件

元件的自訂事件是一種元件間的通訊方式,它適用於子元件向父元件傳遞資料或行為。 (學習影片分享:vuejs教學

原理圖

深入了解Vue元件中的自訂事件

#元件的自訂事件注意點:

  • 1.元件的自訂事件實作的就是子元件向父元件通訊的功能,所以,自訂事件的綁定動作需要在父元件中完成

  • 2.元件的自訂事件的觸發動作需要在子元件中完成,給誰綁定的事件,就找誰觸發

在在了解元件的自訂事件之前,我們也了解propsprops也能實作子元件向父元件通訊,接下來,我會從props的方式過渡到元件的自訂事件,以便大家能夠更好的理解元件的自訂事件,也可以對比這兩種方式存在的差異和相似之處

透過props實作元件間通訊

App.vue中:

<!-- 通过父组件给子组件传递函数类型的props实现:子给父传递数据 -->
<TestA :getName="getName"/>
...
...
<script>
import TestA from &#39;./components/TestA&#39;
	export default {
		name:&#39;App&#39;,
		components:{TestA},
		data(){
			return{
				msg:&#39;你好呀&#39;
			}
		},
		methods:{
			getName(name){
				console.log(&#39;App组件收到了数据&#39;, name)
			},
		},
	}
</script>

程式碼片段中getName()方法中的name參數用來接收子元件傳遞過來的參數

TestA.vue:

<!--通过点击事件传递数据-->
<button @click="sendName">将姓名发送给App组件</button>
...
...
<script>
export default {
    name:&#39;TestA&#39;,
    //接收父组件传递过来的props
    props:["getName"],
    data(){
        return{
            name:&#39;路飞&#39;,
            age:18
        }
    },
    methods:{
        sendName(){
            //点击按钮后,触发此方法,传递name给父组件
            this.getName(this.name)
        }
    }
}
</script>

以上是用props實作的子元件向父元件傳遞資料

效果圖如下:

頁面初始化效果:

深入了解Vue元件中的自訂事件

##點擊按鈕後:

深入了解Vue元件中的自訂事件

透過圖上可以看出,當點擊按鈕之後,控制台輸出了父元件收到的數據,子元件透過

props的方式向父元件傳遞了資料

透過元件的自訂事件實作元件間通訊

#首先第一步,就是要給元件綁定一個自訂事件,文章開始就說,綁定自訂事件是在父元件中完成的:

深入了解Vue元件中的自訂事件

#其次,在子元件中,需要對自訂事件進行觸發,完成元件自訂事件通訊:

深入了解Vue元件中的自訂事件

效果圖如下:

#頁面初始化效果:

深入了解Vue元件中的自訂事件

點擊按鈕後:

深入了解Vue元件中的自訂事件

透過圖上可以看出,點擊按之後,控制台輸出了父元件收到的資料。

透過以上兩種通訊方式,我們可以發現,子元件透過

props方式向父元件傳遞數據,前提是父元件要給子元件傳遞一個回呼函數,子元件接收之後,才能向父元件傳遞數據,而元件的自訂事件只需呼叫$emit 方法對指定自訂事件進行觸發,即可向父組件傳遞資料。

元件自訂事件其他知識點

自訂元件綁定的第二種方式

# App.vue:

<template>
	<div class="app">
		<h1 id="msg">{{msg}}</h1>
		<!-- 通过父组件给子组件传递函数类型的props实现:子给父传递数据 -->
		<TestA :getName="getName"/>
		<!-- 通过父组件给子组件绑定一个自定义事件实现:子给父传递数据 -->
    <!--方法二-->
		<TestB ref="testb"/>
	</div>
</template>

<script>
import TestA from &#39;./components/TestA&#39;
import TestB from &#39;./components/TestB&#39;
	export default {
		name:&#39;App&#39;,
		components:{TestA, TestB},
		data(){
			return{
				msg:&#39;你好呀&#39;
			}
		},
		methods:{
			getName(name){
				console.log(&#39;我收到了数据&#39;, name)
			},
			send(name){
				console.log("send被调用了", name)
			}
		},
		mounted(){
			this.$refs.testb.$on(&#39;demo&#39;, this.send);
		}
	}
</script>

<style scoped>
.app{
	background-color: rgb(162, 255, 139);
	padding: 15px;
}
</style>

透過

ref屬性拿到TestB元件元件的實例物件(vc),在元件掛載完成之後(mounted)使用this.$refs.元件名稱.$on('自訂事件名稱', 回呼函數)完成子元件自訂事件的綁定,同樣也能實現效果。

而且,使用這種方式比較靈活,能完成一些操作,例如一次性自訂事件,延遲,判斷等等。

一次自訂事件

v-on:事件名.once="XXXX
或者
this.$refs.student.$once("事件名", 事件内容)

自訂事件的解綁

當我們使用完自訂事件後,可以解綁自訂事件,這樣做的好處是,盡量降低對程式效能的佔用,提高程式運行的效率

#自訂的解綁動作也是在子元件中進行,

簡單來說也就是,給誰綁定的就找誰解綁定

TestB中

<template>
  <div>
      <h2 id="籍贯-native">籍贯:{{native}}</h2>
      <h2 id="详细地址-adress">详细地址:{{adress}}</h2>
      <button @click="sendNative">点击触发自定义事件</button>
      <button @click="noBand">解绑自定义事件</button>
  </div>
</template>

<script>
export default {
    name:&#39;TestB&#39;,
    data(){
        return{
            native:&#39;东海&#39;,
            adress:&#39;东海风车村&#39;
        }
    },
    methods:{
        sendNative(){
            this.$emit(&#39;demo&#39;,this.native)
        },
        //解绑demo自定义事件
        noBand(){
            this.$off(&#39;demo&#39;);
        }
    }
    
}
</script>

<style scoped>
div{
    background-color: aquamarine;
    padding: 15px;
    margin-top: 5px;
}
</style>

還有一個點就是,假若有很多自訂事件需要解綁,那可以這麼寫:

{方法体内
    this.$off();
}

直接不用传递任何参数,这样写的话,只要是给此组件绑定的任何自定义事件都会解绑

总结

以上内容就是组件的自定义事件的使用,自定义事件虽然在Vuejs中不是一个非常重要的点,但是也是一个实际开发中比较常用的点,在进行某些业务操作时,使用自定义事件可能会节省开发时间以及优化代码,减少代码冗余量,组件自定义事件的具体操作还要看所处的业务逻辑和行为是什么。

深入了解Vue元件中的自訂事件

如果觉得内容不错的话,记得点赞收藏~~~

(学习视频分享:web前端开发

以上是深入了解Vue元件中的自訂事件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除
Netflix:探索React(或其他框架)的使用Netflix:探索React(或其他框架)的使用Apr 23, 2025 am 12:02 AM

Netflix選擇React來構建其用戶界面,因為React的組件化設計和虛擬DOM機制能夠高效處理複雜界面和頻繁更新。 1)組件化設計讓Netflix將界面分解成可管理的小組件,提高了開發效率和代碼可維護性。 2)虛擬DOM機制通過最小化DOM操作,確保了Netflix用戶界面的流暢性和高性能。

vue.js和前端:深入研究框架vue.js和前端:深入研究框架Apr 22, 2025 am 12:04 AM

Vue.js被開發者喜愛因為它易於上手且功能強大。 1)其響應式數據綁定係統自動更新視圖。 2)組件系統提高了代碼的可重用性和可維護性。 3)計算屬性和偵聽器增強了代碼的可讀性和性能。 4)使用VueDevtools和檢查控制台錯誤是常見的調試技巧。 5)性能優化包括使用key屬性、計算屬性和keep-alive組件。 6)最佳實踐包括清晰的組件命名、使用單文件組件和合理使用生命週期鉤子。

vue.js在前端的力量:關鍵特徵和好處vue.js在前端的力量:關鍵特徵和好處Apr 21, 2025 am 12:07 AM

Vue.js是一個漸進式的JavaScript框架,適用於構建高效、可維護的前端應用。其關鍵特性包括:1.響應式數據綁定,2.組件化開發,3.虛擬DOM。通過這些特性,Vue.js簡化了開發過程,提高了應用性能和可維護性,使其在現代Web開發中備受歡迎。

vue.js比反應好嗎?vue.js比反應好嗎?Apr 20, 2025 am 12:05 AM

Vue.js和React各有優劣,選擇取決於項目需求和團隊情況。 1)Vue.js適合小型項目和初學者,因其簡潔和易上手;2)React適用於大型項目和復雜UI,因其豐富的生態系統和組件化設計。

vue.js的功能:增強前端的用戶體驗vue.js的功能:增強前端的用戶體驗Apr 19, 2025 am 12:13 AM

Vue.js通過多種功能提升用戶體驗:1.響應式系統實現數據即時反饋;2.組件化開發提高代碼復用性;3.VueRouter提供平滑導航;4.動態數據綁定和過渡動畫增強交互效果;5.錯誤處理機制確保用戶反饋;6.性能優化和最佳實踐提升應用性能。

vue.js:定義其在網絡開發中的作用vue.js:定義其在網絡開發中的作用Apr 18, 2025 am 12:07 AM

Vue.js在Web開發中的角色是作為一個漸進式JavaScript框架,簡化開發過程並提高效率。 1)它通過響應式數據綁定和組件化開發,使開發者能專注於業務邏輯。 2)Vue.js的工作原理依賴於響應式系統和虛擬DOM,優化性能。 3)實際項目中,使用Vuex管理全局狀態和優化數據響應性是常見實踐。

了解vue.js:主要是前端框架了解vue.js:主要是前端框架Apr 17, 2025 am 12:20 AM

Vue.js是由尤雨溪在2014年發布的漸進式JavaScript框架,用於構建用戶界面。它的核心優勢包括:1.響應式數據綁定,數據變化自動更新視圖;2.組件化開發,UI可拆分為獨立、可複用的組件。

Netflix的前端:React(或VUE)的示例和應用Netflix的前端:React(或VUE)的示例和應用Apr 16, 2025 am 12:08 AM

Netflix使用React作為其前端框架。 1)React的組件化開發模式和強大生態系統是Netflix選擇它的主要原因。 2)通過組件化,Netflix將復雜界面拆分成可管理的小塊,如視頻播放器、推薦列表和用戶評論。 3)React的虛擬DOM和組件生命週期優化了渲染效率和用戶交互管理。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中