Vue中的優先級設置很重要,它影響著組件的更新和渲染。在Vue中設置優先級主要有以下幾種方式:
1.計算屬性的優先級:
<div id="app"> <p>{{ message() }}</p> <p>{{ computedMessage() }}</p> </div> new Vue({ el: '#app', data: { msg: 'hello' }, methods: { message: function () { console.log('message') return this.msg } }, computed: { computedMessage: function () { console.log('computedMessage') return this.msg } } })
在上面的代碼中,message和computedMessage都會輸出hello,但是計算屬性computedMessage的優先級比較高,當msg改變時,computedMessage先更新,然后才是message。
2.監聽watch的優先級:
new Vue({ el: '#app', data: { msg: 'hello' }, watch: { msg: function () { console.log('watch msg') }, computedMsg: function () { console.log('watch computedMsg') } }, computed: { computedMsg: function () { console.log('computedMsg') return this.msg } }, methods: { changeMsg: function () { this.msg = 'world' } } })
在上面的代碼中,當msg改變時,會先更新computedMsg,然后才會更新watch computedMsg。
3.v-for的優先級:
<div id="app"> <p v-for="item in list">{{ item }}</p> </div> new Vue({ el: '#app', data: { list: [1, 2, 3] }, mounted: function () { this.list.splice(1, 1, 4) } })
在上面的代碼中,mounted鉤子函數中改變list的值時,頁面會先刪除原來的2,然后再插入4,這是因為vue會先渲染出原來的列表,然后再根據data中的值更新視圖。
4.v-if和v-show的優先級:
在使用v-if和v-show時,v-if的優先級高于v-show。當v-if的值變為false時,整個元素會被完全卸載,而v-show只是控制元素的顯示隱藏。
5.directives的優先級:
Vue.directive('focus', { inserted: function (el) { el.focus() } }) new Vue({ el: '#app' })
在上面的代碼中,定義了一個全局指令focus,在mounted和其他生命周期中都無法使用,但是可以在模板中使用v-focus指令。
總結:
Vue中不同的優先級設置不同的更新和渲染順序,能夠更好的優化組件性能。在編寫Vue組件時候,應該對每一個優先級設置進行仔細考慮。
上一篇vue 可插拔框架
下一篇vue 中引入vuex