`
换个号韩国红果果
  • 浏览: 48025 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类

vue 生命周期钩子

    博客分类:
  • web
阅读更多
和生命一样,vue组件创建过程中会进入一系列的阶段。可以在这些阶段执行对应的方法。
先上图:

还有路由生命周期钩子,但是路由通常不属于组件的。是在所有组件生命周期开始之前被调用。
组件有以下几个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






  • 大小: 130.8 KB
  • 大小: 459.4 KB
  • 大小: 276.7 KB
  • 大小: 483.8 KB
  • 大小: 388.3 KB
分享到:
评论

相关推荐

    (1条消息) vue生命周期钩子函数的正确使用方式_JaydenSun的博客-CSDN博客_vue生命周期钩子.html

    (1条消息) vue生命周期钩子函数的正确使用方式_JaydenSun的博客-CSDN博客_vue生命周期钩子.html

    Vue 生命周期钩子.doc

    本文将深入探讨Vue生命周期钩子及其应用。 Vue 生命周期钩子主要包括以下八个: 1. **beforeCreate**:在实例被创建之后,数据观测(data observer)和事件处理器还没有初始化时调用。在这个阶段,实例的属性尚未...

    vue3生命周期--钩子函数图解(中文版).svg

    vue3生命周期--钩子函数图解(中文版)

    Vue生命周期钩子的理解

    Vue的生命周期钩子函数主要分为三个阶段: 1. 初始化阶段: - `beforeCreate`: 在这个阶段,组件实例已经创建,但数据观测(Data Observed)和计算属性(Computed properties)尚未设置。因此,此时无法访问到`...

    关于Vue生命周期详解

    Vue生命周期主要包括以下几个关键阶段: 1. **初始化与创建**: - `beforeCreate`:在实例刚刚创建时被调用,此时数据观测(data observer)和属性(props)已经被设置,但数据尚未初始化,因此在这个阶段访问不到数据...

    vue的生命周期钩子函数详解源代码

    vue的生命周期钩子函数详解源代码

    vue生命周期与钩子函数简单示例

    本文实例讲述了vue生命周期与钩子函数。分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang=en> <head> <meta charset=UTF-8> <title>www.jb51.net vue生命周期与钩子函数...

    简述 Vue 中的生命周期钩子函数,并说明它们的作用

    Vue 组件的生命周期钩子函数是一组在组件实例化、挂载、更新、销毁等过程中被依次调用的函数。Vue 中的生命周期钩子函数可以用来在不同阶段执行一些代码,比如初始化数据、与后端交互、操作 DOM 等。以下是 Vue 中...

    5.Vue的生命周期.zip

    此外,Vue还提供了一些特殊的生命周期钩子,比如`activated`和`deactivated`,这两个是针对Vue的keep-alive组件的,当组件被缓存和激活时会触发。学习并理解Vue的生命周期对于编写高性能、可维护的Vue应用至关重要。...

    Vue 生命周期中各钩子函数的作用及应用场景

    Vue 生命周期中各钩子函数的作用及应用场景

    手动创建生命周期钩子函数beforeEnter示例

    在Vue.js框架中,生命周期钩子函数是应用中组件实例从创建到销毁过程中可以调用的特殊函数,用于执行特定的逻辑。`beforeEnter`是一个特殊的路由导航钩子,主要在路由进入之前触发,通常用于预加载数据或者进行一些...

    09-Vue生命周期.md

    Vue的核心功能之一是其生命周期,它为开发者提供了多种生命周期钩子(hooks),以便在组件的不同阶段进行操作。生命周期钩子是Vue组件实例从创建到销毁过程中的特定时刻,它们为开发者提供了介入和执行代码的机会。 ...

    vue 生命周期函数

    Vue组件从创建到销毁的过程可以分为几个阶段,每个阶段都有对应的生命周期钩子函数,开发者可以利用这些钩子来执行特定的任务。主要包括: - **创建阶段**:`beforeCreate` - 在实例初始化之后,数据观测(data ...

    前端vue精选面试题140+道题(附答案)

    前端vue精选面试题140+道题(附答案) 大厂常用 Vuex 为什么要分模块 Vuex 页面刷新数据丢失怎么...vue生命周期钩子函数有哪些? Vue. js有什么特点? axios是什么?如何使用它? 如何在 Vue. js中循环插入图片?

    vue的生命周期.png

    Vue的生命周期钩子函数允许我们在特定的时刻插入自定义逻辑,比如数据预处理、订阅、手动触发DOM操作等。理解这些钩子函数及其顺序对于编写高效且可控的Vue组件至关重要。在实际开发中,我们常常会利用这些钩子来...

    第九课 生命周期钩子函数1

    生命周期钩子函数是 Vue 中的关键概念,它们定义了组件从创建到销毁的各个阶段。这些钩子允许我们在特定的生命周期阶段执行特定的代码,例如数据预处理、DOM 操作或事件绑定。Vue 的生命周期可以理解为组件从诞生到...

    vue3+ts (源码+笔记+生命周期截图)

    7. ** 生命周期钩子的改变**:Vue3 中生命周期钩子发生了变化,如 `beforeCreate` 和 `created` 合并为 `onBeforeMount`,`beforeDestroy` 和 `destroyed` 合并为 `onBeforeUnmount` 等。此外,还新增了一些生命周期...

    Vue生命周期

    ### Vue生命周期详解 #### 一、生命周期概述 Vue.js 是一款流行的前端框架,它通过声明式的编程模型简化了用户界面的构建过程。Vue 的核心特性之一是它的生命周期机制,这为开发者提供了对组件不同阶段的控制能力...

    第2章 Vue开发基础(上) 教学PPT-henu.pptx

    通过学习本节内容,读者可以掌握Vue实例的创建及数据的绑定、Vue事件的监听操作、Vue生命周期钩子函数的使用、Vue组件的注册及组件之间的数据传递的方法等。 Vue实例 通过new关键字实例化Vue({})构造函数,可以...

Global site tag (gtag.js) - Google Analytics