1. 程式人生 > >vue中遇到的坑

vue中遇到的坑

1 一個是eventHub的坑–重複監聽的問題:解決方案監聽之前先off掉

2 路由的坑–不加replace會兩個頁面來回跳,無法正常的返回父級頁面。

3 vuejs對data中陣列的原生方法進行了封裝,所以在改變陣列時能夠觸發檢視更新,但是以下兩種情況是無法觸發檢視的更新的:

1 通過索引直接修改陣列的元素,例如vm.items[0] = {title: 'title'}

 2 無法直接修改陣列的長度,例如vm.items.length = 0

解決方案; 對於第一種vue提供了setvm.items.set(0,{title: ‘title’}) 或者 vm.$set(‘items[0]’,{title: ‘title’})

另外一個列表渲染的時候的有一個性能的小技巧: 如果陣列中本身自帶一個唯一的標識 id 例如

itmes: [
{_id: 1,title: ‘title1’}
{_id: 2,title: ‘title2’}
{_id: 3,title: ‘title3’}
]

在渲染的時候,通過trace-by給陣列設定唯一的標識,這樣vuejs在渲染過程中會盡量重複原有物件的作用域和dom元素。

  • 現在已經升級為:key=’id’ 也就是使用bind
  • 4 v-text 引數是string,作用是更新元素的textContent。{{}} 文字插值本身也是做這個事情的,但是v-text的優點在於可以避免未編譯前的閃現問題

    如果直接使用{{msg}} 在生命週期beforeMount期間,此刻的msg資料尚未編譯至{{msg}}中,使用者能看到一瞬間的{{msg}} 然後

    閃現為 there is a message 而用v-text的話就不會有這個問題

    5 v-el 和 v-ref

    v-el 指令為dom元素註冊了一個索引,使得我們可以直接的訪問DOM元素,語法上說可以通過所屬例項的$els屬性呼叫。例如

    there is a el demo

    vm.$els.demo.innerText // -> there is a el demo

    注意,由於HTML是不區分大小寫的,在v-el中如果使用了駝峰式的命名,系統會自動轉成小寫,但是你可以使用中劃線-來連線你期望大寫的字母

    there is a camelcase 如果你這樣寫的話,拿的時候就只能

    vm.$els.camelcase.innerText: 用小寫的方式拿

    如果你用中劃線

    there is a camelcase 這樣你再拿的時候就會可以方便的使用你喜歡的駝峰式了

    vm.$els.camelCase.innerText

    好了介紹完了 v-el 其實v-ref 跟它是類似的,只不過是v-ref是作用在子元件上的罷了