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和data
  console.log("beforeCreate",this,this.$el)
 },
 created(){
  //组件实例已创建,但未挂载,无法获取到D0M元素,但可以获取到data和methods
  console.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和data
  console.log("beforeCreate",this._data,this.$el)
 },
 created(){
  //组件实例已创建,但未挂载,无法获取到D0M元素,但可以获取到data和methods
  console.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和data
  console.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.计算属性无法执行异步操作,计算属性的返回值不能写在异步函数中。但可以在里面写异步函数

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值