vue 页面回退mounted函数不执行的解决方案


Posted in Javascript onJuly 26, 2020

前言

最近做项目碰到一个很头大的问题--从a页面跳到b页面进行编辑,编辑完再返回a页面,却没走a页面的钩子函数mounted,数据没有更新

经过一番面向百度研究,终于找到了问题所在。接下来就记录一下这个问题及其解决的方法。

原理

其实这个问题主要涉及到vue生命周期,对vue生命周期理解不够深刻的同学可以去官网学习一下:https://vuejs.org/v2/api/#Options-Lifecycle-Hooks

解决这个问题的关键就在于对keep-alive的理解和activated钩子函数的使用。

当在项目中引入keep-alive的时候,页面第一次进入,钩子函数的触发顺序created -> mounted -> activated,退出时触发deactivated。当再次进入(前进或者后退)时,只触发activated。

我们知道 keep-alive 之后,页面模板第一次初始化解析变成HTML片段后,再次进入就不再重新解析而是读取内存中的数据,即,只有当数据变化时,才使用VirtualDOM进行diff更新。故,页面进入的数据获取应该在activated中也放一份。数据加载完毕手动操作DOM的部分也应该在activated中执行才会生效。

所以,应该activated中留一份数据获取的代码,或者不要created部分,直接将created中的代码转移到activated中。

html结构

vue 页面回退mounted函数不执行的解决方案

js部分--vue生命周期

beforeCreate () {


console.log('在实例初始化之前调用')

}

created () {


console.log('在实例初始化之后调用,经常用于操作数据,发起ajax请求')

}

beforeMount () {


console.log('在挂载开始之前被调用,如果是在服务器端渲染时不被调用;在这个函数里,无法获取元素')

}
 

mounted () {


console.log('在挂载后被调用,也不能在服务器端渲染时被调用;这个函数里,是可以获取元素,并进行操作的')

}

beforeUpdate () {


console.log('视图层数据更新前调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM')

}

updated () {


console.log('视图层数据更新后调用')

}

beforeDestroy () {


console.log('实例销毁之前调用,在被销毁的组件中进行调用;有一些操作,会在实例已经销毁的时候还在运行,这时候为了性能考虑,就在这里结束哪些操作')

}

destroyed () {


console.log('实例销毁后调用。')

}

activated和deactivated配合keep-alive标签使用!

activated () {
console.log('实例被激活时使用,用于重复激活一个实例的时候')
}
deactivated () {
console.log('实例没有被激活时')
}

总结

keep-alive是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM;导致在组件mounted钩子中调用的刷新页面内容时,这个钩子没有被调用。

故:使用Vue组件切换过程,执行钩子activated(keep-alive组件激活时调用),而不是挂载钩子mounted。

补充知识:vue 子组件 created 方法不执行问题

近期做了一个项目 里面有一个树形菜单,将数据写在 js (死数据)中,所有的东西都能够正常执行(i 标签,子节点,父节点),但是当在请求接口文件或者请求后台数据的时候,发现引入的子组件的created方法不执行,但是点击父级菜单展开时还是能够触发,后来发现 是生命周期的问题,仔细查看一下,后来解决 解决方法如下:用watch 检测一下data的数据变化,created方法既然在点击的时候执行,所以也必须保留,好啦,就这样

以上这篇vue 页面回退mounted函数不执行的解决方案就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
Jun 04 Javascript
jquery插件 cluetip 关键词注释
Jan 12 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
Jan 06 Javascript
Vue.js使用v-show和v-if的注意事项
Dec 13 Javascript
JavaScript闭包和范围实例详解
Dec 19 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
Mar 15 Javascript
微信小程序中进行地图导航功能的实现方法
Jun 29 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
Aug 03 Javascript
Vue.js 父子组件通信的十种方式
Oct 30 Javascript
Vue自定义属性实例分析
Feb 23 Javascript
js实现贪吃蛇小游戏(加墙)
Jul 31 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
Nov 05 Javascript
vuex分模块后,实现获取state的值
Jul 26 #Javascript
何时/使用 Vue3 render 函数的教程详解
Jul 25 #Javascript
全面解析JavaScript Module模式
Jul 24 #Javascript
vuex 多模块时 模块内部的mutation和action的调用方式
Jul 24 #Javascript
在Vuex中Mutations修改状态操作
Jul 24 #Javascript
Vue自动构建发布脚本的方法示例
Jul 24 #Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
Jul 24 #Javascript
You might like
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
php设计模式 Visitor 访问者模式
2011/06/28 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
2012/06/07 PHP
完美解决PHP中的Cannot modify header information 问题
2013/08/12 PHP
PHP传参之传值与传址的区别
2015/04/24 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
javascript 命名规则 变量命名规则
2010/02/25 Javascript
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
用JQUERY增删元素的代码
2012/02/14 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
如何能分清npm cnpm npx nvm
2019/01/17 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
antd配置config-overrides.js文件的操作
2020/10/31 Javascript
Python 列表list使用介绍
2014/11/30 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
对python中return与yield的区别详解
2020/03/12 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
python中yield的用法详解
2021/01/13 Python
用60行代码实现Python自动抢微信红包
2021/02/04 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
小学生感恩演讲稿
2014/04/25 职场文书
商场广播稿范文
2015/08/19 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python