vue強(qiáng)制刷新組件的三種方法
通過組件的key值來刷新
(當(dāng)某個(gè)組件的key變化后,組件都會(huì)被重新渲染一遍)
<template> <el-table :data="data" :key="refresh" > ... </el-table> </template> <script lang="ts"> import { Component, Vue, Watch } from 'vue-property-decorator' @Component({}) export default class extends Vue { refresh= true @Watch('data') watchData() { this.refresh= !this.refresh } } </script>
還有通過if來刷新
(當(dāng)v-if的值發(fā)生變化時(shí),組件都會(huì)被重新渲染一遍)
<template> <el-table v-if="refresh" :data="data" > ... </el-table> </template> <script lang="ts"> import { Component, Vue, Watch } from 'vue-property-decorator' @Component({}) export default class extends Vue { refresh = true // 監(jiān)視data是否發(fā)生變化 @Watch('data') watchData() { // 移除組件 this.refresh = false // this.$nextTick可實(shí)現(xiàn)在DOM 狀態(tài)更新后,執(zhí)行傳入的方法。 this.$nextTick(() => { // 重新渲染組件 this.refresh = true }) } } </script>
通過this $forceUpdate強(qiáng)制重新渲染
(如果要在組件內(nèi)部中進(jìn)行強(qiáng)制刷新,則可以調(diào)用this.$forceUpdate()強(qiáng)制重新渲染組件)
<template> <button @click="reflush()">刷新當(dāng)前組件</button> </template> <script lang="ts"> import { Component, Vue } from 'vue-property-decorator' @Component({}) export default class extends Vue { reflush() { this.$forceUpdate() } } </script>
擴(kuò)展:vue中tab切換時(shí)請(qǐng)求數(shù)據(jù)重復(fù)問題
問題場(chǎng)景
切換tab時(shí),會(huì)請(qǐng)求列表的接口,在then中進(jìn)行了數(shù)據(jù)處理(添加到list后面)
ps:list在不同的tab中時(shí)同一個(gè)
快速點(diǎn)擊tab切換時(shí),上一個(gè)tab的請(qǐng)求,會(huì)在當(dāng)前的tab的list中處理,導(dǎo)致數(shù)據(jù)不對(duì)
例如:
兩個(gè)tab:成功列表 & 失敗列表
點(diǎn)擊成功列表后,且請(qǐng)求未返回時(shí),點(diǎn)擊失敗列表:這個(gè)時(shí)候,失敗列表中會(huì)出現(xiàn)成功列表的數(shù)據(jù)
解決方案:
大概的代碼意思,不能直接復(fù)制運(yùn)行的,參考意思就行
data() { return { random: new Date().valueOf(), activeTab: 0, list: [] }; } watch: { activeTab: { handler(val) { this.random = new Date().valueOf() // 請(qǐng)求list this.getList() }, }, } methods: { getList() { const random = this.random api().then((list) => { // 判斷處理數(shù)據(jù)時(shí)的tab是不是沒變過 if (this.random != random) return this.list = this.list.concat(list) }) } }
這個(gè)只是想到的一個(gè)比較簡(jiǎn)單偷懶的方法,并不是項(xiàng)目中實(shí)現(xiàn)的最優(yōu)方案。結(jié)合自己項(xiàng)目情況考慮為好。
axios 取消請(qǐng)求相對(duì)而言,比較麻煩,懶,小項(xiàng)目不想寫
到此這篇關(guān)于vue強(qiáng)制刷新組件的3種方法的文章就介紹到這了,更多相關(guān)vue強(qiáng)制刷新組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue組件強(qiáng)制刷新的4種方案
- Vue3中進(jìn)行頁面局部刷新組件刷新的操作方法
- Vue?Router解決多路由復(fù)用同一組件頁面不刷新問題(場(chǎng)景分析)
- vue組件值變化但不刷新強(qiáng)制組件刷新的問題
- Vue實(shí)現(xiàn)父子組件頁面刷新的幾種常用方法
- vue打開子組件彈窗都刷新功能的實(shí)現(xiàn)
- vue相同路由跳轉(zhuǎn)強(qiáng)制刷新該路由組件操作
- 解決vue更新路由router-view復(fù)用組件內(nèi)容不刷新的問題
- vue強(qiáng)制刷新組件的方法示例
- Vue 實(shí)現(xiàn)手動(dòng)刷新組件的方法
- 使用Vue開發(fā)動(dòng)態(tài)刷新Echarts組件的教程詳解
相關(guān)文章
vux-scroller實(shí)現(xiàn)移動(dòng)端上拉加載功能過程解析
這篇文章主要介紹了vux-scroller實(shí)現(xiàn)移動(dòng)端上拉加載功能過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10vuex實(shí)現(xiàn)登錄狀態(tài)的存儲(chǔ),未登錄狀態(tài)不允許瀏覽的方法
下面小編就為大家分享一篇vuex實(shí)現(xiàn)登錄狀態(tài)的存儲(chǔ),未登錄狀態(tài)不允許瀏覽的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03axios+vue請(qǐng)求時(shí)攜帶cookie的方法實(shí)例
做項(xiàng)目時(shí)遇到一個(gè)需求,后端需要在接口請(qǐng)求時(shí),對(duì)用戶登陸狀態(tài)進(jìn)行判斷,需要在請(qǐng)求時(shí)攜帶Cookie,下面這篇文章主要給大家介紹了關(guān)于axios+vue請(qǐng)求時(shí)攜帶cookie的相關(guān)資料,需要的朋友可以參考下2022-09-09vue如何使用pdf.js實(shí)現(xiàn)在線查看pdf文件功能
PDF.js是一個(gè)開源的JavaScript庫,用于在網(wǎng)頁上渲染和顯示PDF文件,在Vue中使用PDF.js來預(yù)覽PDF文件是很常見的需求,這篇文章主要給大家介紹了關(guān)于vue如何使用pdf.js實(shí)現(xiàn)在線查看pdf文件功能的相關(guān)資料,需要的朋友可以參考下2024-03-03element-UI el-table修改input值視圖不更新問題
這篇文章主要介紹了element-UI el-table修改input值視圖不更新問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Vue實(shí)現(xiàn)動(dòng)態(tài)添加或者刪除對(duì)象和對(duì)象數(shù)組的操作方法
這篇文章主要介紹了在Vue項(xiàng)目中實(shí)現(xiàn)動(dòng)態(tài)添加或者刪除對(duì)象和對(duì)象數(shù)組的操作方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09