一、$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;即當前路由改變,但是該組件被復用時調用
