vue 生命周期钩子的理解 watch computed

### 理解vue的生命周期,首先需要注意几个关键字

1. el :选择器

2. $el:对应选择器的template模板(html代码)

3. render:也是vue实例中的一项,其参数更接近vue解析器,按优先级,render参数 > vue实例对象中有template > 外部的HTML模板 后面两个也是将其编译成render函数

【注意】render选项参数比template更接近Vue解析器!所以优先级如下:

   render函数选项  > template参数  > 外部HTML

4. $mount :当Vue实例没有el属性时,则该实例尚没有挂载到某个dom中,假如需要延迟挂载,可以在之后手动调用vm.$mount()方法来挂载。例如:

new Vue({内部无el项}).$mount(‘#app‘)是延迟加载,同下面的语句相同

new Vue({el:"#app",***})

<template>
    <div id = "testhookapp">
        <input type="number" v-model="testhook">{{testhook}}
        <br>
        <input type="text" v-model="testhook2">{{testhook2}}
        <br>
        {{fullchange}}
    </div>
</template>
<script>
   var vm = {
        name:‘testhookapp‘,
        data:function(){
            return {
               testhook:1,
               testhook2:"hello"
            }
        },
        watch:{
            testhook:function(){
                console.log(‘watch监听到了testhook的变化‘)
            },
            testhook2:function(){
                console.log(‘watch监听到了testhook2222的变化‘)
            }
        },
        computed:{
            fullchange:function(){
                console.log(‘computed监听到了fullchange‘+this.testhook +‘,‘+this.teshhook2)
                return this.testhook +‘,‘+this.testhook2
            }
        },
        beforeCreate: function () {
            console.log(‘调用了beforeCreat钩子函数‘)
        },
        created: function () {
            console.log(‘调用了created钩子函数‘)
            console.log(this.$el)
            console.log(this)
        },
        beforeMount: function () {
            console.log(‘调用了beforeMount钩子函数‘)
        },
        mounted: function () {
            console.log(‘调用了mounted钩子函数‘)
            console.log(this.$el)
            console.log(this)
        },
        beforeUpdate: function () {
            console.log(‘调用了beforeUpdate钩子函数‘)
            console.log(this.$el)
            console.log(this)
        },
        updated: function () {
            console.log(‘调用了updated钩子函数‘)
        }
    }
 export default vm
</script>
<style>

</style>

可以分别注释一下代码看输出的结果; 

### 注意

> 1. vue实例中没有el时钩子,仅仅执行到了created ;有el时将可以按顺序执行beforeCreate  created  beforeMount mounted几个钩子,没有el选项,则停止编译,也意味着暂时停止了生命周期,直到vm.$mount(el)

> 2. beforeUpdate 和 updated两个钩子会在data数据发生变化时进行调用,也就是说可以监听data里面的所有数据,只有要变化就执行钩子函数,重渲染(调用这两个钩子函数)的前提是被更改的数据已经被写入模板中!!

  eg {{number}}在模板中显示,当只在js中对数据进行修改而没有显示在页面上时将不会进行重渲染调用对应的钩子函数

  1. 对比watch:针对某一个数据进行监听实时的;

  2. 对比computed:当依赖项不变化时不会进行重新的执行,只有变化时才会再次执行

> 3. 在各个钩子里面引用的this指向 vm 实例,即使在没有mounted挂载在具体元素上时mounted之前的钩子中打印this仍然有$el属性,而在其后包括mounted钩子里面单独打印this.$el时是未定义的,但是断点调试是符合的(此处有点不理解,希望有大神可以讨论下)

参考学习连接 :

https://www.cnblogs.com/penghuwan/p/7192203.html

http://www.zhi-jie.net/vue2-study-mount/

原文地址:https://www.cnblogs.com/xhliang/p/8352367.html

时间: 2024-07-31 20:25:06

vue 生命周期钩子的理解 watch computed的相关文章

对vue生命周期/钩子函数的理解

对于实现页面逻辑交互等效果,我们必须知晓vue的生命周期,才能愉快的玩耍,知道我们写的东西应该挂载到哪里,vue官方给出的api讲解的那叫一个简单啊,如下: 所有的生命周期钩子自动绑定this上下文到实例中,因此你可以访问数据,对属性和方法进行运算.这意味着你不能使用箭头函数来定义一个生命周期方法(例如created: () => this.fetchTodos()).这是因为箭头函数绑定了父上下文,因此this与你期待的 Vue 实例不同,this.fetchTodos的行为未定义. 下面附加

Vue生命周期/钩子函数的理解

对于实现页面逻辑交互等效果,我们必须弄懂vue的生命周期,知道我们写的东西应该挂载到哪里.vue官方api给了简单的逻辑,如下: 所有的生命周期钩子自动绑定this上,因此你可以访问数据,属性和方法进行运算,所以要特别注意的是不能使用箭头函数来定义一个生命周期方法(例如created: () => this.fetchTodos()). 下面附加一张生命周期图示 <!DOCTYPE html> <html> <head> <title></tit

vue生命周期钩子函数

转载自:https://segmentfault.com/a/1190000008879966 vue生命周期探究(一) 前言 在使用vue开发的过程中,我们经常会接触到生命周期的问题.那么你知道,一个标准的工程项目中,会有多少个生命周期勾子吗?让我们来一起来盘点一下: 根组件实例:8个 (beforeCreate.created.beforeMount.mounted.beforeUpdate.updated.beforeDestroy.destroyed) 组件实例:8个 (beforeCr

vue 生命周期钩子

每个vue实例被创建时都会经历一系列初始化的过程,像是一个生命从无到有的过程,所以叫生命周期,而这个过程都有对应的不同阶段,也就对应了生命周期不同的钩子函数,这些生命周期函数,作为vue实例的属性使用,只有到了这一过程的时候,对应的函数才会被调用,总结下来有如下方法: beforeCreate:在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用: created:在实例创建完成后被立即调用.在这一步,实例已完成以下的配置:数据观测 (d

Vue生命周期钩子---2

vue生命周期简介 咱们从上图可以很明显的看出现在vue2.0都包括了哪些生命周期的函数了. 生命周期探究 对于执行顺序和什么时候执行,看上面两个图基本有个了解了.下面我们将结合代码去看看钩子函数的执行. ps:下面代码可以直接复制出去执行 <!DOCTYPE html> <html> <head> <title></title> <script type="text/javascript" src="http

Vue 生命周期钩子函数

Vue生命周期 每个vue实例在被创建时都需要经过一系列初始化过程. 如设置数据监听.编译模板.将实例挂载到DOM.在数据变化时更新DOM等. 同时在这个过程中也会运行一些角坐生命周期钩子的函数,这给了用户在不同阶段添加自己代码的机会. 2.6.1版本有8个生命周期 beforeCreate created beforeCreate 在实例创建之前执行,此时data数据访问不到,不能通过this修改data属性 created 在实例创建完执行,此时可以拿到data数据,可以通过this修改da

vue生命周期钩子函数解读步骤

vue 生命周期: 一个组件从创建到销毁的过程 let vm = new Vue({ el : "id", data : { }, 1. beforeCreate(){ 1. 当vue实例化的时候会做一个初始化的操作,在这个生命周期函数里面我们可以做初始化的loading 2. 在当前函数中访问不到data中的属性,但是可以通过Vue的实例进行访问 vm."属性" console.log(beforeCreate) } 2. created(){ 1. 当befor

VueRouter和Vue生命周期(钩子函数)

一.vue-router路由 1.介绍 vue-router是Vue的路由系统,用于定位资源的,在页面不刷新的情况下切换页面内容.类似于a标签,实际上在页面上展示出来的也是a标签,是锚点.router需要相应的js文件,可到官网下载或者使用CDN: https://unpkg.com/vue-router/dist/vue-router.js使用Vue需要引入相应的JS文件,可到官网下载或者直接使用CDN:https://cdn.jsdelivr.net/npm/[email protected

VUE生命周期钩子

var app=new Vue({ el:'#app', data:{ a:2 }, beforeCreate:function(){ console.log("实例创建之前"); }, created:function(){ console.log("a is:"+this.a); console.log("实例创建之后"); }, beforeMount:function(){ console.log("模板编译/挂载之前"