vue更新數(shù)據(jù)卻不渲染頁面的解決
vue更新數(shù)據(jù)卻不渲染頁面
1.Vue不能檢測(cè)通過數(shù)組索引直接修改一個(gè)數(shù)組項(xiàng)
原因:由于JavaScript的限制,Vue不能檢測(cè)數(shù)組和對(duì)象的變化
解決辦法:
this.$set(arr,index,newVal)
2.選擇功能選中時(shí)賦值了,但沒渲染頁面
場(chǎng)景:

點(diǎn)擊這個(gè)沒有顯示“√”
解決辦法:
checkClick (item) {
item.check =! item.check;
this.$forceUpdate()
},聽說循環(huán)數(shù)據(jù)更新的層級(jí)太深,導(dǎo)致數(shù)據(jù)不更新,從而導(dǎo)致視圖不更新,用上面可以解決,但我沒遇到過這種情況,請(qǐng)查看Vue.js官方

3.路由參數(shù)變化時(shí)
頁面不更新,本質(zhì)上就是數(shù)據(jù)沒有更新
原因:路由視圖組件引用了相同組件時(shí),當(dāng)路由參數(shù)變化時(shí),會(huì)導(dǎo)致該組件無法更新。
解決辦法:
通過watch監(jiān)聽$route的變化
watch: {
'$route': function() {
}
}4.在異步更新執(zhí)行之前操作DOM數(shù)據(jù)不會(huì)變化
原因:Vue在更新DOM時(shí)是異步執(zhí)行。
只要偵聽到數(shù)據(jù)變化,Vue將開啟一個(gè)隊(duì)列,并緩沖在同一個(gè)事件循環(huán)中發(fā)生的所有數(shù)據(jù)變更。
如果同一個(gè) watcher 被多次觸發(fā),只會(huì)被推入到隊(duì)列中一次。
這種在緩沖時(shí)去除重復(fù)數(shù)據(jù)對(duì)于避免不必要的計(jì)算和 DOM 操作是非常重要的。
然后,在下一個(gè)的事件循環(huán)“nextTick”中,Vue 刷新隊(duì)列并執(zhí)行實(shí)際 (已去重的) 工作。
解決辦法:
this.$nextTick(function(){ })5.獲取后臺(tái)返回的數(shù)組進(jìn)行排序處理了,頁面內(nèi)容卻不排序
原因:顯示的元素不會(huì)動(dòng)
解決辦法:
使用v-if先隱藏元素,更新的數(shù)組排序處理好了,才顯示元素
vue頁面的渲染過程
首先vue會(huì)找到webpack的打包配置文件。在build/webpack.base.conf.js下:在這里,定義了vue的程序入口文件
vue加載時(shí)文件的執(zhí)行順序
- 執(zhí)行index.html文件
- 執(zhí)行main.js文件
- main.js掛載了app.vue文件,用app.vue的templete替換index.html中的
- main.js中注入了路由文件,將對(duì)應(yīng)的組件渲染到router-view中
- router-view中加載Layout文件
- Layout 加載Navbar, Sidebar, AppMain
vue內(nèi)部頁面的執(zhí)行順序
Vue 推薦在絕大多數(shù)情況下使用 template 來創(chuàng)建你的 HTML。但是模板畢竟是模板,不是真實(shí)的dom節(jié)點(diǎn)。從模板到真實(shí)dom節(jié)點(diǎn)還需要經(jīng)過一些步驟
- 把模板編譯為render函數(shù)
- 實(shí)例進(jìn)行掛載, 根據(jù)根節(jié)點(diǎn)render函數(shù)的調(diào)用,遞歸的生成虛擬dom
- 對(duì)比虛擬dom,渲染到真實(shí)dom
組件內(nèi)部data發(fā)生變化,組件和子組件引用data作為props重新調(diào)用render函數(shù),生成虛擬dom, 返回到步驟3
一. 模板到render
// App.vue
<template>
<div>
hello word
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
vue中各選項(xiàng)及鉤子函數(shù)執(zhí)行順序





在頁面首次加載執(zhí)行順序有如下:
beforeCreate//在實(shí)例初始化之后、創(chuàng)建之前執(zhí)行created//實(shí)例創(chuàng)建后執(zhí)行beforeMounted//在掛載開始之前調(diào)用filters//掛載前加載過濾器computed//計(jì)算屬性directives-bind//只調(diào)用一次,在指令第一次綁定到元素時(shí)調(diào)用directives-inserted//被綁定元素插入父節(jié)點(diǎn)時(shí)調(diào)用activated//keek-alive組件被激活時(shí)調(diào)用,則在keep-alive包裹的嵌套的子組件中觸發(fā)mounted//掛載完成后調(diào)用{{}}//mustache表達(dá)式渲染頁面
修改頁面input時(shí),被自動(dòng)調(diào)用的選項(xiàng)順序如下:
watch//首先先監(jiān)聽到了改變事件filters//過濾器沒有添加在該input元素上,但是也被調(diào)用了beforeUpdate//數(shù)據(jù)更新時(shí)調(diào)用,發(fā)生在虛擬dom打補(bǔ)丁前directived-update//指令所在的組件的vNode更新時(shí)調(diào)用,但可能發(fā)生在其子vNode更新前directives-componentUpdated//指令所在的組件的vNode及其子組件的vNode全部更新后調(diào)用updated //組件dom已經(jīng)更新
組件銷毀時(shí),執(zhí)行順序如下:
beforeDestroy//實(shí)例銷毀之前調(diào)用directives-unbind//指令與元素解綁時(shí)調(diào)用,只調(diào)用一次deactivated//keep-alive組件停用時(shí)調(diào)用destroyed//實(shí)例銷毀之后調(diào)用
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
el-input限制輸入正整數(shù)的兩種實(shí)現(xiàn)方式
el-input框是Element UI庫中的一個(gè)輸入框組件,用于接收用戶的輸入,這篇文章主要介紹了el-input限制輸入正整數(shù),需要的朋友可以參考下2024-02-02
elementUI實(shí)現(xiàn)下拉選項(xiàng)加多選框的示例代碼
因產(chǎn)品需求和UI樣式調(diào)整,本文主要實(shí)現(xiàn)elementUI下拉選項(xiàng)加多選框的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
Vue項(xiàng)目中實(shí)現(xiàn)ElementUI按需引入過程解析
這篇文章主要介紹了Vue項(xiàng)目中實(shí)現(xiàn)ElementUI按需引入,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
elementui中el-input回車搜索實(shí)現(xiàn)示例
這篇文章主要介紹了elementui中el-input回車搜索實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
vue2結(jié)合element-ui的gantt圖實(shí)現(xiàn)可拖拽甘特圖
因?yàn)楣ぷ髦幸玫礁侍貓D,所以我在網(wǎng)上搜索可以用的甘特圖,搜索了好多,但是網(wǎng)上搜到大多數(shù)都很雞肋,不能直接使用,下面這篇文章主要給大家介紹了關(guān)于vue2結(jié)合element-ui的gantt圖實(shí)現(xiàn)可拖拽甘特圖的相關(guān)資料,需要的朋友可以參考下2022-11-11
Vue通過字符串關(guān)鍵字符實(shí)現(xiàn)動(dòng)態(tài)渲染input輸入框
這篇文章主要為大家詳細(xì)介紹了Vue如何通過字符串關(guān)鍵字符實(shí)現(xiàn)動(dòng)態(tài)渲染input輸入框。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-12-12

