VUE溫習:nextTick、$refs、嵌套路由、keep-alive緩存、is特性、路由屬性用法、路由鈎子函數


一、$nextTick

1、vue的dom執行異步更新,只要觀察到數據變化,vue將開啟一個隊列,並緩沖在同一事件循環中發生的所有數據改變。

2、vue.$nextTick(cb),數據發生變化,更新dom后執行回調

二、$refs用法

1、ref作用於普通元素——得到dom節點

2、ref作用於子組件——得到組件實例,可使用組件所有方法

3、當v-for用於元素或組件的時候,refs將是包含dom節點或組件實例的數組(想得到單個的ref,只需循環即可)

三、vue組件hover事件模擬

1、mouseover/mouseout,mouseenter/mouseleave

2、第三方組件加事件不生效問題——添加native修飾符

四、嵌套路由

1、一個被路由過來的頁面下可以繼續使用路由。比如我們需要路由過來的頁面頭部一些信息不變,下面點擊不同信息展示不同內容時就可以用到嵌套路由

2、嵌套路由聲明,利用children: [] 去聲明嵌套路由

3、嵌套路由聲明的注意事項:

(1)以“/”開頭的路由會被當做根路徑,所以子路由的path是不能加“/”的

(2)注意匹配一個path為空的情況,然后匹配一個default組件,避免出現空白頁的問題

五、keep-alive

1、vue的內置組件,能在組件切換過程中將狀態保存在內存中,防止dom重復渲染。keep-alive包裹動態組件時,能緩存不活動的組件實例,而不是銷毀他們。

2、keep-alive與transition相似,只是一個抽象組件,真實或虛擬都不會渲染,也不存在與父組件鏈中

3、include、exclude:匹配的組件緩存/不緩存

注意:(1)exclude的優先級大於include;(2)注意匹配的是組件名稱,而不是路由名稱,也就是說要給組件設置name值。

4、keep-alive生命周期鈎子函數:

(1)activated:組件被激活時調用,組件第一次渲染也會調用,之后每次進入keep-alive均調用

(2)deactivated:組件被停用時調用

5、什么時候獲取數據?

當引入keep-alive 的時候,頁面第一次進入,鈎子的觸發順序created-> mounted-> activated,退出時觸發deactivated。當再次進入(前進或者后退)時,只觸發activated。keep-alive 之后頁面模板第一次初始化解析變成HTML片段后,再次進入就不在重新解析而是讀取內存中的數據,即只有當數據變化時,才使用VirtualDOM進行diff更新。故頁面進入的數據獲取應該在activated中也放一份。數據下載完畢手動操作DOM的部分也應該在activated中執行才會生效。所以,應該activated中留一份數據獲取的代碼,或者不要created部分,直接將created中的代碼轉移到activated中。

六、is特性:

1、限制元素:vue編譯器為組件提供特殊功能,在有些情況下,組件也可以是原生html元素的形式,以is特性擴展

原因在於有些html元素本身的限制比如select等,如果想在<select></select>中使用組件模板,這時候就需要使用is特性擴展,從而達到在受限的html元素中使用

2、動態組件:vue中提供一個動態模板,可以再任意模板中切換,就是用is特性來掛載:<component :is="currentView"></component>,比如當currentView為comA時就顯示comA模板,為comB時就顯示comB模板

七:vue路由屬性及用法

1、to:路由鏈接

2、replace:設置replace屬性不留下history記錄,即不能回退

3、append:設置append屬性在當前路徑前添加基路徑:比如a to b,加append為/a/b,不加append就為/b

4、tag:渲染標簽

5、active-class:設置鏈接激活時使用的css類名。默認值可以通過路由的構造選項linkActiveClass來全局配置,默認值為 ‘router-link-active‘

6、exact:激活的路徑匹配規則

7、events:觸發導航的事件(默認click),可以是一個字符串或包含字符串的數組

8、scrollBehavior(to, from, savedPosition)控制滾動

八、路由鈎子函數:主要用來攔截導航

1、全局的:

router.beforeEach()

router.afterEach():沒有next(),不能改變導航

2、某個路由獨享的鈎子:

在定義路由路徑時,beforeEnter(to, from, next)

3、組件內鈎子:

beforeRouteEnter():不能訪問this,可以通過傳一個回調next(vm => {})來訪問組件實例

beforeRouteLeave():可以訪問this,可通過next(false)取消導航;同時必須得有next()

beforeRouteUpdate():二級導航更新時觸發,可訪問this;即當前路由改變,但是該組件被復用時調用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM