這篇文章帶大家了解一下vue中封裝元件利器:$attrs、$listeners屬性,看看它們的用法,希望對大家有幫助!
多層級元件巢狀需要傳遞資料時,通常使用的方法是透過vuex
。但只是傳遞數據,不做中間處理,使用 vuex
處理,未免有些大材小用了。所以就有了 $attrs
、 $listeners
兩個屬性 ,通常是搭配 inheritAttrs 一起使用。 【相關推薦:vuejs影片教學】
prop
接收會自動設定到子元件內部的最外層標籤上,如果是class
和style
的話,會合併最外層標籤的class
和style
。 prop
屬性,可以使用inheritAttrs
停用繼承,然後透過v-bind="$ attrs"
把外部傳入的非prop
屬性設定在希望的標籤上,但是這不會改變class
和style
#。 inheritAttrs 屬性
#2.4.0 新增
官網連結https://cn .vuejs.org/v2/api/#inheritAttrs
類型:boolean
true
#詳細說明
預設情況下父作用域的不被認定為props 的attribute 綁定(attribute bindings) 將會「回退」且作為普通的HTML attribute 應用在子元件的根元素上。當撰寫包裹一個目標元素或另一個元件的元件時,這可能不會總是符合預期行為。透過設定
inheritAttrs 到
false
$attrs 可以讓這些 attribute 生效,且可以透過 v-bind 顯性的綁定到非根元素上。
注意:這個選項
不影響
style 綁定。
範例:#父元件
<template> <my-input required placeholder="请输入内容" type="text" class="theme-dark" /> </template> <script> import MyInput from './child' export default { name: 'parent', components: { MyInput } } </script>
<template> <div> <input v-bind="$attrs" class="form-control" /> </div> </template> <script> export default { name: 'MyInput', inheritAttrs: false } </script>
v-bind="$attrs"這個屬性,他會自動接受並綁定
inheritAttrs: false
// 父组件 <template> <my-input required placeholder class="theme-dark" @focue="onFocus" @input="onInput" > </my-input> </template> <script> import MyInput from './child' export default { components: { MyInput }, methods: { onFocus (e) { console.log(e.target.value) }, onInput (e) { console.log(e.target.value) } } } </script>
// 子组件 <template> <div> <input type="text" v-bind="$attrs" class="form-control" @focus="$emit('focus', $event)" @input="$emit('input', $event)" /> </div> </template> <script> export default { name: 'MyInput', inheritAttrs: false } </script>
<input type="text" v-bind="$attrs" class="form-control" + v-on="$listeners" - @focus="$emit('focus', $event)" - @input="$emit('input', $event)" />
以上是認識vue中的$attrs和$listeners屬性,聊聊用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!