当前位置: 首页 > news >正文

vue2生命周期和计算属性

vue2的生命周期

删除一些没用的

App.vue

删成这个样子就行

<template><router-view/></template><style lang="scss"></style>

来到路由把没用的删除

import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'Vue.use(VueRouter)const routes = [{path: '/',name: 'home',component: HomeView},]const router = new VueRouter({routes
})export default router

有报错没关系那是因为你引入的文件已经删除了

新建一个命名为生命周期的文件夹

然后在下面新建一个index.vue(规范都用index)

像设置打出vue2的快捷代码请看

[VUE框架学习笔记]VsCode快速生成vue组件模板(详细图示!)_vscode自动生成vue模板-CSDN博客

index.vue

<template><div class=""></div>
</template><script>
export default {name: ''
}
</script><style lang="less" scoped></style>

scoped单独样式

更改对应的路由

//引用刚刚新建的文件
import HomeView from '../views/Life_cycle/index.vue'
//使用路由
const routes = [{path: '/',name: 'home',component: HomeView},]
import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/Life_cycle/index.vue'Vue.use(VueRouter)const routes = [{path: '/',name: 'home',component: HomeView},]const router = new VueRouter({routes
})export default router

来到

index.vue文件里

学习语法和生命周期(beforeCreate,created,beforeMount,mounted)

<template><div class=""></div>
</template><script>
export default {data(){return{name:'张三',age:18}},methods:{},beforeCreate(){//组件实例未创建,此时无法获取道el和dataconsole.log("beforeCreate",this,this.$el)},created(){//组件实例已创建,但未挂载,无法获取到D0M元素,但可以获取到data和methodsconsole.log('created',this,this.$el)},beforeMount(){//组件实例已创建,但未挂载,可以获取到D0M元素console.log('beforeMount',this,this.$el)},mounted(){//组件实例已挂载,可以获取到D0M元素console.log('mounted',this,this.$el)}
}
</script><style lang="less" scoped></style>

先要了解

  • DOM元素是指网页中的div
  • $el 组件实例的根DOM元素
  • $data 组件实例的数据对象

当执行后可以看到data值封装到vue2中是_data的书写形式

因为我们需要观察这四个生命周期的不同,所以我们加上_data再打印一遍

<template><div class=""></div>
</template><script>
export default {data(){return{name:'张三',age:18}},/*** $el 组件实例的根DOM元素$data 组件实例的数据对象所有的生命周期都是同步的*/methods:{},beforeCreate(){//组件实例未创建,此时无法获取道el和dataconsole.log("beforeCreate",this._data,this.$el)},created(){//组件实例已创建,但未挂载,无法获取到D0M元素,但可以获取到data和methodsconsole.log('created',this._data,this.$el)},beforeMount(){//组件实例已创建,但未挂载,可以获取到D0M元素console.log('beforeMount',this._data,this.$el)},mounted(){//组件实例已挂载,可以获取到D0M元素.如果要操作dom的话需要在mounted之后进行console.log('mounted',this._data,this.$el)}
}
</script><style lang="less" scoped></style>

(面试题)如何在beforeCreate里面获取到dom元素?

原因:所有的生命周期都是同步的

所以只需要在里面添加异步就可以了

例如:

这样异步后,就挂载上了

 beforeCreate(){//组件实例未创建,此时无法获取道el和dataconsole.log("beforeCreate",this._data,this.$el)setTimeout(() => {console.log("beforeCreate添加了异步任务",this._data,this.$el)}, 100);},

vue2的计算属性

先添加个文件夹和文件放我们的计算属性

修改下路由(切换到计算属性页面)

这里我把生命周期的换成了计算属性的

import Vue from 'vue'
import VueRouter from 'vue-router'
// import HomeView from '../views/Life_cycle/index.vue'
import HomeView from '../views/Computed/index.vue'
Vue.use(VueRouter)const routes = [{path: '/',name: 'home',component: HomeView},]const router = new VueRouter({routes
})export default router

我们返回计算属性写一下

主要在计算属性中

1.不要使用箭头函数

2.计算属性是有缓存的只有依赖项改变了,计算属性的值才会改变

<template><div class=""></div>
</template><script>
export default {name: ''
}
</script><style lang="scss" scoped></style>
<template><div><div>{{sum}}</div><button @click="add">num加一</button><button @click="add2">num2加一</button></div>
</template><script>
export default {data(){return{name:'你会不会',num:0,num2:0}},methods:{add(){this.num++},add2(){this.num2++}},computed:{sum(){return this.num+this.num2}},
}</script>

计算属性的优点缺点

计算属性无法执行异步操作,计算属性的返回值不能写在异步函数中。但可以在里面写异步函数

<template><div><div>sum{{sum}}</div><div>num3{{num3}}</div><button @click="add">num加一</button><button @click="add2">num2加一</button><button @click="add3">num2加一</button><div>sum2{{sum2()}}</div></div></template><script>export default {data(){return{name:"张三",num:20,num2:30,num3:30}},methods:{add(){this.num++},add2(){this.num2++},add3(){this.num3++},sum2(){console.log('sum2')return this.num+ this.num2}},computed:{/*** 1.不要使用箭头函数* 2.计算属性是有缓存的只有依赖项改变了,计算属性的值才会改变* 3.计算属性无法执行异步操作,计算属性的返回值不能写在异步函数中。但可以在里面写异步函数* */sum(){console.log('sum')setTimeout(()=>{console.log('计算属性的异步操作+')//  return this.num+this.num2},100)return this.num+this.num2}}}</script><style lang="scss" scoped></style>

1.当sum2和sum发生变化都被计算属性监听=>缓存机制,所以计算属性是有缓存的只有依赖项改变了,计算属性的值才会改变

2.计算属性无法执行异步操作,计算属性的返回值不能写在异步函数中。但可以在里面写异步函数

http://www.lryc.cn/news/358399.html

相关文章:

  • Hadoop3:MapReduce之简介、WordCount案例源码阅读、简单功能开发
  • centos8stream 编译安装 php-rabbit-mq模块
  • 「异步魔法:Python数据库交互的革命」(二)
  • php正则中的i,m,s,x,e分别表示什么
  • 最新!2023年台湾10米DEM地形瓦片数据
  • 网络学习(11) |深入解析客户端缓存与服务器缓存:HTTP缓存控制头字段及优化实践
  • uniapp中二次封装jssdk和使用
  • 只刷题可以通过PMP考试吗?
  • Python Selenium 详解:实现高效的UI自动化测试
  • npm获取yarn在安装依赖时 git://github.com/user/xx.git 无法访问解决方法 -- 使用 insteadOf设置git命令别名
  • Centos7网络故障,开机之后连不上网ens33mtu 1500 qdisc noop state DOWN group default qlen 1000
  • 分析 Base64 编码和 URL 安全 Base64 编码
  • cocos 屏幕点击坐标转换为节点坐标
  • 电瓶车进电梯识别报警摄像机
  • 数据库到服务器提权
  • 【MySQL精通之路】InnoDB(9)-表和页压缩(1)-表压缩
  • 【前端】vue+element项目中select下拉框label想要显示多个值多个字段
  • 橙派探险记:开箱香橙派 AIpro 与疲劳驾驶检测的奇幻之旅
  • 云计算期末复习(1)
  • frp转发服务
  • 【主流分布式算法总结】
  • spring cloud config server源码学习(一)
  • 人脸识别——探索戴口罩对人脸识别算法的影响
  • 磁盘管理后续——盘符漂移问题解决
  • 基于GO 写的一款 GUI 工具,M3u8视频下载播放器-飞鸟视频助手
  • 关于EasyExcel导入数据时表格日期格式识别为数字问题
  • 高通Android 12/13打开省电模式宏开关
  • 2023年西安交通大学校赛(E-雪中楼)
  • 如何在vue2中使用tailwind
  • 【OrangePi AIpro】开箱初体验以及OAK深度相机测试