Vue 2.4版本發布后引入了一個新的屬性$attrs。這個屬性可以幫助我們將組件的非prop屬性傳遞給組件的根元素,而不需要在組件內部手動定義這些屬性。這樣可以使組件的代碼更加簡潔,也更加易于維護。
Vue.component('my-component', { template: 'This is my component', mounted: function () { console.log(this.$attrs); // { class: 'my-component-class', id: 'my-component-id' } } });
如上所示的代碼中,我們定義了一個名為my-component的組件,并在組件外通過class和id屬性傳遞給了它。組件內部并沒有顯式定義這些屬性,但是在mounted鉤子函數中,我們可以通過this.$attrs來獲取到外部傳遞的所有屬性。
但需要注意的是,如果在組件內部使用了v-bind綁定了一個prop,那么這個prop不會被包含在this.$attrs中。
Vue.component('my-component', { props: ['myProp'], template: 'This is my component', mounted: function () { console.log(this.$attrs); // { class: 'my-component-class', id: 'my-component-id' } } });
如上所示的代碼中,我們在組件內部定義了一個名為myProp的prop,并在組件外部使用v-bind指令將外部數據傳遞進組件內部。這時,我們的$attrs中就不再包含my-prop這個prop了。
綜上所述,通過使用$attrs屬性,我們可以使組件代碼更加簡潔易維護,同時也可以更加靈活地傳遞非prop屬性。