电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

vue監聽路由變化時watch方法會執行多次的原因及解決

瀏覽:3日期:2022-09-30 17:52:19

本人前端菜鳥一名,一直致力于不間斷的生產管理后臺的bug,并以此自勉自勵。近幾天接到一個需求,網上也搜了很多例子,但是沒有從根本上解決。在這里記錄一下我自己的解決的過程,這也是第一次在掘金發言,求輕虐。

需求描述:

有A、B兩個頁面,需要將A頁面的orderId用路由傳參的方式傳入到B頁面執行數據關聯查詢,然后顯示在B頁面

需求解析:

如果是你,你拿到這個需求,應該很容易想到在B頁面對路由變化做watch,然后獲取參數執行查詢數據的方法完事。

解決需求

A頁面中:

const route = {name: ’BpageName’,params: { orderId: this.tableData[index].id },meta: { title: ’B頁面’} }this.$router.push(route)

push一個路由重新打開B頁面

然后B頁面中接受路由傳參:

@Watch(’$route.params.packageId’)routeParamsChanged(newParams: any, oldParams: any) :void { // 通過監聽傳參的變化來重新復制參數 if (newParams) { this.getList(newParams) }}

看起來是不是很簡單?

但是問題來了,因為B頁面做了keep-alive頁面緩存,第一次路由切換的時候routeParamsChanged方法只執行一次,達到了預期效果。但是,如果關閉B頁面或者不關閉B頁面的情況下再從A頁面跳轉到B頁面的情況下就會觸發兩次或多次routeParamsChanged方法。查了很多資料,vue項目watch內的函數重復觸發問題 這里有解釋造成這種情況的原因。

解決方法1: 判斷fullPath是不是A頁面

if (this.$route.fullPath === ’A頁面路由路徑’) { // do something}

懷著激動的心情去試了試

@Watch(’$route’)routeParamsChanged(newParams: any, oldParams: any) :void { // 通過監聽傳參的變化來重新復制參數 if (newParams === ’/Apage’) { this.getList(newParams) }}

結果還是不行,routeParamsChanged方法還是會執行兩次或多次。 解決方法2 添加一個flag參數來判斷頁面是否是active狀態,使用keep-alive緩存的組件只會觸發activated和deactivated事件,所以就在這兩個事件觸發時把flag置為true和false,只有在flag為true的時候才執行getList()。

private activatedFlag: boolean = falseactivated () { this.activatedFlag = true;}deactivated () { this.activatedFlag = false;}@Watch(’$route’)routeParamsChanged(newParams: any, oldParams: any) :void { // 通過監聽傳參的變化來重新復制參數 if (newParams && this.activatedFlag) { this.getList(newParams) }}

這回改解決了吧?結果還是不行,routeParamsChanged方法還是會執行兩次或多次。 崩潰ing.........

問題解決

借鑒了上面的解決方法2,最終在activated ()生命周期鉤子函數中取實現獲取參數且調用獲取數據的方法即可,都不用去監聽路由的變化,只要獲取了this.$route.params.orderId就去獲取數據。

private activatedFlag: boolean = falseactivated () { this.activatedFlag = true if (this.$route.params.orderId && this.activatedFlag) { this.getList(this.$route.params.orderId) }}deactivated () { this.activatedFlag = false;}

大功告成,終于解決了。大佬們求輕吐槽代碼,有更好的意見或建議,歡迎評論留言指導。

以上就是vue監聽路由變化時watch方法會執行多次的原因及解決的詳細內容,更多關于vue watch方法會執行多次的原因及解決的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
主站蜘蛛池模板: 企业微信营销_企业微信服务商_私域流量运营_艾客SCRM官网 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 皮带机_移动皮带机_大倾角皮带机_皮带机厂家 - 新乡市国盛机械设备有限公司 | 造价工程师网,考试时间查询,报名入口信息-网站首页 | 间苯二酚,间苯二酚厂家-淄博双和化工 | 珠宝展柜-玻璃精品展柜-首饰珠宝展示柜定制-鸿钛展柜厂家 | 高扬程排污泵_隔膜泵_磁力泵_节能自吸离心水泵厂家-【上海博洋】 | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 农业四情_农业气象站_田间小型气象站_智慧农业气象站-山东风途物联网 | 医养体检包_公卫随访箱_慢病随访包_家签随访包_随访一体机-济南易享医疗科技有限公司 | 减速机三参数组合探头|TSM803|壁挂式氧化锆分析仪探头-安徽鹏宸电气有限公司 | 不锈钢水管-不锈钢燃气管-卫生级不锈钢管件-不锈钢食品级水管-广东双兴新材料集团有限公司 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 洁净化验室净化工程_成都实验室装修设计施工_四川华锐净化公司 | 德国BOSCH电磁阀-德国HERION电磁阀-JOUCOMATIC电磁阀|乾拓百科 | 挤塑板-XPS挤塑板-挤塑板设备厂家[襄阳欧格] | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 游泳池设备安装工程_恒温泳池设备_儿童游泳池设备厂家_游泳池水处理设备-东莞市君达泳池设备有限公司 | 华中线缆有限公司-电缆厂|电缆厂家|电线电缆厂家 | 无线对讲-无线对讲系统解决方案-重庆畅博通信 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 立刷【微电签pos机】-嘉联支付立刷运营中心| 专业的新乡振动筛厂家-振动筛品质保障-环保振动筛价格—新乡市德科筛分机械有限公司 | 锂电池生产厂家-电动自行车航模无人机锂电池定制-世豹新能源 | 干粉砂浆设备_干混砂浆生产线_腻子粉加工设备_石膏抹灰砂浆生产成套设备厂家_干粉混合设备_砂子烘干机--郑州铭将机械设备有限公司 | 我车网|我关心的汽车资讯_汽车图片_汽车生活! | 磨煤机配件-高铬辊套-高铬衬板-立磨辊套-盐山县宏润电力设备有限公司 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 宝宝药浴-产后药浴-药浴加盟-艾裕-专注母婴调养泡浴 | 山东钢格板|栅格板生产厂家供应商-日照森亿钢格板有限公司 | 通信天线厂家_室分八木天线_对数周期天线_天线加工厂_林创天线源头厂家 | 鲸鱼视觉 -数字展厅多媒体互动展示制作公司| 低浓度恒温恒湿称量系统,强光光照培养箱-上海三腾仪器有限公司 | 陶氏道康宁消泡剂_瓦克消泡剂_蓝星_海明斯德谦_广百进口消泡剂 | 无刷电机_直流无刷电机_行星减速机-佛山市藤尺机电设备有限公司 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 东莞注册公司-代办营业执照-东莞公司注册代理记账-极刻财税 | 烘干设备-热泵烘干机_广东雄贵能源设备有限公司 | 小区健身器材_户外健身器材_室外健身器材_公园健身路径-沧州浩然体育器材有限公司 | 福州甲醛检测-福建室内空气检测_环境检测_水质检测-福建中凯检测技术有限公司 | 蓝牙音频分析仪-多功能-四通道-八通道音频分析仪-东莞市奥普新音频技术有限公司 | 液压升降平台_剪叉式液压/导轨式升降机_传菜机定做「宁波日腾升降机厂家」 |