和生命一样,vue组件创建过程中会进入一系列的阶段。可以在这些阶段执行对应的方法。
先上图:
还有路由生命周期钩子,但是路由通常不属于组件的。是在所有组件生命周期开始之前被调用。
组件有以下几个state。
注意里面的 在 next(vm=>{
console.log("heh")
console.log(from.name)
vm.path1=from.name
vm.$nextTick(()=>{
console.log("这是nexttick",vm.$el.innerHTML);
})
本语句的执行时机是mounted钩子调用之后被调用。
但是注意当vm.path=from.name之后,触发了updated,但是在updated之后dom并没有更新。而是在调用vm.$nextTick之后才看见了dom的更新,这是因为dom更新是异步的。
此时是先调用beforeUpdate钩子,然后是updated钩子 ,完成之后调用nexttick
先上图:
还有路由生命周期钩子,但是路由通常不属于组件的。是在所有组件生命周期开始之前被调用。
组件有以下几个state。
beforeCreate:() created:这里已经完成了数据观察,可以改变data里面的属性值,并且会被响应到 可以在这里添加loading开关 可以在这里获取数据了 beforeMount: mounted(从这里可以开始访问$el,此时的html是以data里面的数据直接进行渲染的,可以在这里渲染loading样式) beforeUpdate:(还可以更改状态) updated:(可以获取到更新后的dom) beforeDestroy:(可以在这里提示用户还有信息没有保存) destroyed:还是可以获取到el的内容 假如数据一开始就绑定上去,后面不更新数据的话 调用顺序依次为:beforeCreate->created->beforeMount->mounted 完毕。
如果一开始是这样report={};
后来在mounted里面发起了ajax请求,数据回来后回去更新report。此时还会触发beforeUpdate.
updated钩子。
在点击页面的返回按钮后,伺候该页面里面的组件会被销毁。
记住 还有导航,导航是组件beforeCreate之前调用的。先eachbefore,再beforeRouteEnter 然后才是组件内部的beforeCreate等等生命钩子。 销毁时。看上图 可以得知是先调用路由自己的beforeRouteLeave再调用beforeEach钩子,然后才是路由自己的。 可以在beforeDestroy里面保持数据。等下一次进来时获取数据减少流量
获取数据:可以在created里面 或者在beforeRouteEnter 里面
在第二种里面的话:beforeRouteEnter (to,from ,next){ console.log("beforeRouteEnter "); var json={ userPhoneForMobile:localStorage.getItem("phone"), reportId:to.params.id }; $.get(url.get_report_item,json,(d)=>{ d=JSON.parse(d); next(vm=>{ vm.report=d.data }) }) // this.getReport(to.params.id); }
即在渲染组件之前利用路由信息直接取ajax获取资源,当资源获取成功后才会跳到目标页面去,所以一直停留在该页面,需要有进度指示器
继续:
[code="js export default{
data:function(){
return {
report:{},
error:null,
loading:false,
iszhb:localStorage.getItem(is_zhb.key),
url_can_dispatch:false,
path1:""
}
},
methods:{
getReport(id){
var json={
reportId:id
}
util.post(get_report_item.url,json,(d)=>{
this.loading=false;
this.report=d.data;
console.log("report 来临")
})
},
get_title(){
return util.getTitleStr(this.$route.name);
},
display_desc(name){
return !!name&&name!="接单"&& name !="上报到指挥部";
},
get_can_be_ispatch(){
console.log("pathh2 发送");
util.post(canbedispatch.url,{},(d)=>{
this.url_can_dispatch=d.data;
console.log("if canbe 来临")
}
)
}
},
computed:{
imgcut_equl_2(){
return this.report.imgUrlList.filter((img)=>{
return img.imgIsCut===2;
})
},
imgcut_equl_3(){
return this.report.imgUrlList.filter((img)=>{
return img.imgIsCut===3;
})
},
canbedispatch(){
return this.report.status!=3&&this.url_can_dispatch;
},
// 区分是否是我报的单
myreport(){
return this.$route.query.myreport||false;
}
},
beforeCreate(){
console.log("beforeCreated");
},
created(){
console.log("created");
// this.loading=true;
console.log("report 发送");
this.getReport(this.$route.params.id);
console.log("pathh1 发送");
this.get_can_be_ispatch();
},
beforeRouteEnter (to,from ,next){
console.log("beforeRouteEnter ");
console.log(from.name)
next(vm=>{
console.log("heh")
console.log(from.name)
vm.path1=from.name
vm.$nextTick(()=>{
console.log("这是nexttick",vm.$el.innerHTML);
})
}
);
},
beforeRouteLeave(to,from ,next){
console.log("beforeRouteLeave");
var ok=true;
if(ok){
next();
}else{
next(false)
}
},
beforeMount(){
console.log("beforeMount");
},
mounted(){
console.log("mounted");
console.log(this.$el.innerHTML)
},
beforeUpdate(){
console.log("beforeUpdate");
console.log(this.$el.innerHTML);
},
updated(){
console.log("updated");
console.log(this.$el);
},
beforeDestroy(){
console.log("berforeDestroy");
},
destroyed(){
console.log("destroyed");
},
updated(){
console.log("updated");
console.log(this.$el.innerHTML);
},
filters:{
sub_str(str){
return util.substr(str);
},
format_time(time){
return util.format_time(time);
},
get_list_name(list=[],key="typeName",split=","){
return util.get_list_name(list,key,split);
}
},
components:{
nvHead
}
}"]
注意里面的 在 next(vm=>{
console.log("heh")
console.log(from.name)
vm.path1=from.name
vm.$nextTick(()=>{
console.log("这是nexttick",vm.$el.innerHTML);
})
本语句的执行时机是mounted钩子调用之后被调用。
但是注意当vm.path=from.name之后,触发了updated,但是在updated之后dom并没有更新。而是在调用vm.$nextTick之后才看见了dom的更新,这是因为dom更新是异步的。
this.lists=arr; this.$nextTick(() => { $(window).scrollTop(window.window.sessionStorage.scrollTop); console.log('已经滚动到顶部了'); });
此时是先调用beforeUpdate钩子,然后是updated钩子 ,完成之后调用nexttick
发表评论
-
vue
2017-06-03 19:41 0比如 假如没有添加上响应式属性的话,那么就会出现b只是一个简 ... -
自动配置代理
2017-02-13 15:42 1614有些时候 手机或者pc上面需要频繁的切换代理与取消代理,感觉切 ... -
对话框回调
2017-01-11 10:26 871今天遇见一个需求 在提交数据时需要同时弹出3个确认菜单,点击了 ... -
svg, 支持mouseover
2017-01-09 18:07 1071今天项目中的需求,是在一个fill后的svg path上面加上 ... -
vue,vue-router,vux,综合
2017-01-04 17:36 947实例化vue实例时初始化router store 状态管理。触 ... -
分享vue脚手架工具,vue-cli
2017-01-04 15:42 775脚手架渲染原理: 下面 ... -
平时chrome调试遇见的 浏览器优化
2017-01-04 11:23 458js基础:在一个事件处理器(click)会形成一个闭包,可以访 ... -
百度文库复制方法
2015-11-11 10:24 1165即时对象初始化方法 (function(){ //cod ... -
js array对象的迭代方法
2015-07-16 12:09 682所有方法都接受两个参数:(fn,ctx); 默认的函数里面ct ... -
qq空间刷评论工具
2015-06-25 17:48 883var a=document.getElementsB ... -
jquery内部链式调用机理
2015-06-07 21:17 1084只需要在调用该对象合适(比如下列的setStyles)的方法后 ... -
this问题 js
2015-06-07 21:08 458任何一个函数都可以被当做构造函数使用!并且new了之后一定是返 ... -
js delete 删除机理以及它的内存泄露问题的解决方案
2015-06-02 12:43 918delete删除属性时只是解除了属性与对象的绑定,故当属性值为 ... -
浮动布局
2015-05-13 17:27 0c由于其宽度略大于右边的空格,故不会飘到右边去,会被卡住 恰好 ... -
zoom.js
2015-05-12 19:01 708它的基于bootstrap 的https://raw.gith ... -
jquery-avgrund
2015-05-12 12:31 0先引入这些文件 <link r ... -
workmark
2015-05-10 18:07 481在一个容器当中 指定 ... -
jquery
2015-05-09 16:33 0$(document).ready(function(){ ... -
豆瓣电影首页的分析
2015-05-08 22:48 844网址http://movie.douban.com 1 先上 ... -
setTimeout()用法
2015-05-08 22:31 0setTimeout("$('searchI ...
相关推荐
(1条消息) vue生命周期钩子函数的正确使用方式_JaydenSun的博客-CSDN博客_vue生命周期钩子.html
本文将深入探讨Vue生命周期钩子及其应用。 Vue 生命周期钩子主要包括以下八个: 1. **beforeCreate**:在实例被创建之后,数据观测(data observer)和事件处理器还没有初始化时调用。在这个阶段,实例的属性尚未...
vue3生命周期--钩子函数图解(中文版)
Vue的生命周期钩子函数主要分为三个阶段: 1. 初始化阶段: - `beforeCreate`: 在这个阶段,组件实例已经创建,但数据观测(Data Observed)和计算属性(Computed properties)尚未设置。因此,此时无法访问到`...
Vue生命周期主要包括以下几个关键阶段: 1. **初始化与创建**: - `beforeCreate`:在实例刚刚创建时被调用,此时数据观测(data observer)和属性(props)已经被设置,但数据尚未初始化,因此在这个阶段访问不到数据...
vue的生命周期钩子函数详解源代码
本文实例讲述了vue生命周期与钩子函数。分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang=en> <head> <meta charset=UTF-8> <title>www.jb51.net vue生命周期与钩子函数...
Vue 组件的生命周期钩子函数是一组在组件实例化、挂载、更新、销毁等过程中被依次调用的函数。Vue 中的生命周期钩子函数可以用来在不同阶段执行一些代码,比如初始化数据、与后端交互、操作 DOM 等。以下是 Vue 中...
此外,Vue还提供了一些特殊的生命周期钩子,比如`activated`和`deactivated`,这两个是针对Vue的keep-alive组件的,当组件被缓存和激活时会触发。学习并理解Vue的生命周期对于编写高性能、可维护的Vue应用至关重要。...
Vue 生命周期中各钩子函数的作用及应用场景
在Vue.js框架中,生命周期钩子函数是应用中组件实例从创建到销毁过程中可以调用的特殊函数,用于执行特定的逻辑。`beforeEnter`是一个特殊的路由导航钩子,主要在路由进入之前触发,通常用于预加载数据或者进行一些...
Vue的核心功能之一是其生命周期,它为开发者提供了多种生命周期钩子(hooks),以便在组件的不同阶段进行操作。生命周期钩子是Vue组件实例从创建到销毁过程中的特定时刻,它们为开发者提供了介入和执行代码的机会。 ...
Vue组件从创建到销毁的过程可以分为几个阶段,每个阶段都有对应的生命周期钩子函数,开发者可以利用这些钩子来执行特定的任务。主要包括: - **创建阶段**:`beforeCreate` - 在实例初始化之后,数据观测(data ...
前端vue精选面试题140+道题(附答案) 大厂常用 Vuex 为什么要分模块 Vuex 页面刷新数据丢失怎么...vue生命周期钩子函数有哪些? Vue. js有什么特点? axios是什么?如何使用它? 如何在 Vue. js中循环插入图片?
Vue的生命周期钩子函数允许我们在特定的时刻插入自定义逻辑,比如数据预处理、订阅、手动触发DOM操作等。理解这些钩子函数及其顺序对于编写高效且可控的Vue组件至关重要。在实际开发中,我们常常会利用这些钩子来...
生命周期钩子函数是 Vue 中的关键概念,它们定义了组件从创建到销毁的各个阶段。这些钩子允许我们在特定的生命周期阶段执行特定的代码,例如数据预处理、DOM 操作或事件绑定。Vue 的生命周期可以理解为组件从诞生到...
7. ** 生命周期钩子的改变**:Vue3 中生命周期钩子发生了变化,如 `beforeCreate` 和 `created` 合并为 `onBeforeMount`,`beforeDestroy` 和 `destroyed` 合并为 `onBeforeUnmount` 等。此外,还新增了一些生命周期...
### Vue生命周期详解 #### 一、生命周期概述 Vue.js 是一款流行的前端框架,它通过声明式的编程模型简化了用户界面的构建过程。Vue 的核心特性之一是它的生命周期机制,这为开发者提供了对组件不同阶段的控制能力...
通过学习本节内容,读者可以掌握Vue实例的创建及数据的绑定、Vue事件的监听操作、Vue生命周期钩子函数的使用、Vue组件的注册及组件之间的数据传递的方法等。 Vue实例 通过new关键字实例化Vue({})构造函数,可以...