Vue中.native修飾符的作用及說明
vue .native修飾符的作用
一般情況下,父組件要監(jiān)聽子組件的事件,可以通過$emit的方式。
但是如果父組件要監(jiān)聽子組件的原生事件,比如:input的focus事件。
此時可以通過使用v-on的.native
修飾符達到目的。
.native 可以在某組件的 根元素 上監(jiān)聽一個原生事件
從上面的語句可以看出
.native作用于組件的根元素。
所以如果需要監(jiān)聽的元素是作為根元素,此時.native完全適用
例如:
父組件
<template> <div id="app"> <baseLabel v-on:focus.native="onFocus"/> </div> </template> <script> import baseLabel from './components/HelloWorld.vue' export default { name: 'app', components: { baseLabel }, methods: { onFocus() { console.log('lalalalal'); } } } </script>
子組件
<template> <input type="text"/> </template> <script> export default { name: 'baseLabel', } </script>
效果:
但是如果目標預(yù)監(jiān)聽的元素不是根元素,那么.native
可能會失效,此時可以利用 emit的方法 , 通過使用‘emit的方法,通過使用` emit的方法,通過使用‘listeners.native的事件。
子組件則監(jiān)聽這些事件,當事件發(fā)生通知父組件 這個時候就不需要使用
.native`修飾符就可以監(jiān)聽原生事件了
實例:
父組件
<template> <div id="app"> <baseLabel v-on:focus="onFocus"/> </div> </template> <script> import baseLabel from './components/HelloWorld.vue' export default { name: 'app', components: { baseLabel }, methods: { onFocus() { console.log('lalalalal'); } } } </script>
子組件
<template> <label> <input v-on="inputListeners"/> </label> </template> <script> export default { name: 'baseLabel', computed: { inputListeners() { var vm = this // 將所有的對象整合在一起 return Object.assign({}, // 從父組件添加所有的監(jiān)聽器 this.$listeners, // 添加自定義的監(jiān)聽器 { // 確保v-model正常工作 input(event) { vm.$emit('input',event.target.value) } }) } } } </script>
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue引入elementUi后打開頁面報錯Uncaught?TypeError的解決方式
這篇文章主要給大家介紹了關(guān)于vue引入elementUi后打開頁面報錯Uncaught?TypeError:?Cannot?read?properties?of?undefined(reading?‘prototype‘)的解決方式,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-08-08