vue开发问题积累
mounted鉤子中使用$refs出現(xiàn)undefined
原因:如果在DOM結構中的某個DOM節(jié)點使用了v-if、v-show或者v-for(即根據(jù)獲得的后臺數(shù)據(jù)來動態(tài)操作DOM,即響應式),那么這些DOM是不會再mounted階段找到的。
**解決方法:**如果說mounted階段是加載階段,那么updated階段則是完成了數(shù)據(jù)更新到DOM的階段。在update階段使用this.$refs.xxx,就100%能找到該DOM節(jié)點。
vue 鉤子函數(shù)
created()與activated()
created():在創(chuàng)建vue對象時,當html渲染之前就觸發(fā);但是注意,全局vue.js不強制刷新或者重啟時只創(chuàng)建一次,也就是說,created()只會觸發(fā)一次;
activated():在vue對象存活的情況下,進入當前存在activated()函數(shù)的頁面時,一進入頁面就觸發(fā);可用于初始化頁面數(shù)據(jù)等
keep-alive用法
<keep-alive>是Vue的內置組件,能在組件切換過程中將狀態(tài)保留在內存中,防止重復渲染DOM。
include: 字符串或正則表達式。只有匹配的組件會被緩存。
exclude: 字符串或正則表達式。任何匹配的組件都不會被緩存。
在app.vue中這樣寫:
<template><div id="app"><keep-alive><router-view v-if="$route.meta.keepAlive"/></keep-alive><router-view v-if="!$route.meta.keepAlive"></router-view></div> </template><script> export default {name: 'App' } </script><style> </style>這樣就實現(xiàn)了有效的控制是否緩存。
activated,deactivated這兩個生命周期函數(shù)一定是要在使用了keep-alive組件后才會有的,否則則不存在
當引入keep-alive的時候,頁面第一次進入,鉤子的觸發(fā)順序created-> mounted-> activated,退出時觸發(fā)deactivated。當再次進入(前進或者后退)時,只觸發(fā)activated。
事件掛載的方法等,只執(zhí)行一次的放在 mounted 中;組件每次進去執(zhí)行的方法放在 activated 中, activated 中的不管是否需要緩存多會執(zhí)行。
總結
- 上一篇: PHP 长文章分页函数
- 下一篇: 小程序、vue 新闻上下轮播