欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

vue vm.$attrs

吉茹定1年前7瀏覽0評論

當我們在使用Vue的時候,經常會遇到需要向子組件傳遞一些不固定的屬性值,這時候我們就需要使用$attrs了。

export default {
props: {
value: {
type: String
}
},
render(h) {
return h('div', {
attrs: this.$attrs
})
}
}

$attrs是Vue實例上內置的屬性,在使用render函數的時候非常方便。我們可以直接將$attrs傳遞給HTML元素來使組件可以接收父組件傳遞的所有原生HTML屬性。

如果我們在模板中渲染一個組件,同時給組件加上一些原生屬性,可以通過v-bind="$attrs"的方式來將$attrs傳遞給組件。

在組件中,我們可以使用class和id這些原生HTML屬性以及其他自定義的props屬性來進行操作。

export default {
props: {
value: {
type: String
}
},
render(h) {
return h('div', {
attrs: this.$attrs,
class: ['my-component-class', this.$attrs.class]
}, [
h('input', {
attrs: {
type: 'text',
value: this.value
},
on: {
input: (event) =>{
this.$emit('input', event.target.value)
}
}
})
])
}
}

上面的代碼中,我們使用了this.$attrs.class來獲取class的值,并把它拼接到自定義的class名稱上。同時,我們定義了一個input元素,使用value綁定了當前組件的value值,并通過emit來向外部傳遞數據。

需要注意的是,$attrs只能綁定原生屬性,如果需要綁定自定義屬性,可以使用v-bind指令來進行傳遞。

另外,如果在使用v-bind="$attrs"傳遞屬性的時候,如果父級組件中存在其他的props屬性和$attrs中的屬性重名,那么會優先使用props屬性,$attrs中同名屬性則會被忽略。

在使用時,我們也可以手動的傳遞部分$attrs屬性。比如下面的demo中,我們可以手動傳遞class屬性,并把其他屬性繼承父組件。

總的來說,$attrs是一個非常方便的屬性,可以在組件內獲取父組件傳遞過來的原生HTML屬性,并可以利用這些屬性對組件進行操作和樣式設置。