zoukankan      html  css  js  c++  java
  • vue生命周期

    注意:mounted渲染触发一次,updated数据改变了就会触发

    具体看  https://blog.csdn.net/weixin_44797182/article/details/104653633

    什么是生命周期:从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期!
    生命周期钩子:就是生命周期事件的别名而已;
    生命周期钩子 = 生命周期函数 = 生命周期事件
    创建
      1,创建一个vue实例对象
      
       2,初始化 一些默认的声明周期函数和默认的事件  -> beforeCreate()
        这时候,data和methods中的数据都没初始化
       
       3,初始化 数据 -> created()
        data和methods中的数据都被初始化好了
      
       4,编译模板 -> beforeMount()
        即 <div id=“app”>{{msg}} </div> -> 在内存中生成一个编译好的最终模板字符串 -> 把这个模板字符串渲染为内存中dom
        注意:只是在内存中渲染好了模板,并没有把模板挂载到页面上去,此时 页面还是旧的, 简单的说 结果就是在内存中渲染了一个 <div id=“app”>ok</div> 的dom元素,但是页面上还是 <div id=“app”>{{msg}} </div>
        
       5,将编译好的模板真实提换到页面中去 -> mounted()
          即 将内存中渲染好的dom元素即 < div id=“app”>ok< /div>已经 提换了页面上的 < div id=“app”>{{msg}} < /div>

    运行
       6,当数据改变时 即完成data(model层) ->view(视图层)的更新
          6.1 先在内存中渲染一份最新的dom树 -> beforeUpdate()
             页面上的数据还是旧的,但是data中的数据都是最新的,页面和最新的数据尚未保存同步
          6.2 将最新的dom树重新渲染到真实的页面上去 -> updated()
             页面上的数据和data中的数据都是最新的,页面和最新的数据保存同步
            
    销毁
       7,销毁之前,实例上的data和所有methods,以及过滤器、指令。。。都处于可用状态,还未真正销毁 -> beforeDestroy()
       8,销毁,实例上的data和所有methods,以及过滤器、指令。。。都处于不可用状态,还未真正销毁 -> destroyed()


    <!DOCTYPE html>
    <html lang="en">

    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./lib/vue-2.4.0.js"></script>
    </head>

    <body>
    <div id="app">
    <input type="button" value="修改msg" @click="msg='No'">
    <h3 id="h3">{{ msg }}</h3>
    </div>

    <script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
    el: '#app',
    data: {
    msg: 'ok'
    },
    methods: {
    show() {
    console.log('执行了show方法')
    }
    },
    beforeCreate() { // 这是我们遇到的第一个生命周期函数,表示实例完全被创建出来之前,会执行它
    // console.log(this.msg)
    // this.show()
    // 注意: 在 beforeCreate 生命周期函数执行的时候,data 和 methods 中的 数据都还没有没初始化
    },
    created() { // 这是遇到的第二个生命周期函数
    // console.log(this.msg)
    // this.show()
    // 在 created 中,data 和 methods 都已经被初始化好了!
    // 如果要调用 methods 中的方法,或者操作 data 中的数据,最早,只能在 created 中操作
    },
    beforeMount() { // 这是遇到的第3个生命周期函数,表示 模板已经在内存中编辑完成了,但是尚未把 模板渲染到 页面中
    // console.log(document.getElementById('h3').innerText)
    // 在 beforeMount 执行的时候,页面中的元素,还没有被真正替换过来,只是之前写的一些模板字符串
    },
    mounted() { // 这是遇到的第4个生命周期函数,表示,内存中的模板,已经真实的挂载到了页面中,用户已经可以看到渲染好的页面了
    // console.log(document.getElementById('h3').innerText)
    // 注意: mounted 是 实例创建期间的最后一个生命周期函数,当执行完 mounted 就表示,实例已经被完全创建好了,此时,如果没有其它操作的话,这个实例,就静静的 躺在我们的内存中,一动不动
    },


    // 接下来的是运行中的两个事件
    beforeUpdate() { // 这时候,表示 我们的界面还没有被更新【数据被更新了吗? 数据肯定被更新了】
    /* console.log('界面上元素的内容:' + document.getElementById('h3').innerText)
    console.log('data 中的 msg 数据是:' + this.msg) */
    // 得出结论: 当执行 beforeUpdate 的时候,页面中的显示的数据,还是旧的,此时 data 数据是最新的,页面尚未和 最新的数据保持同步
    },
    updated() {
    console.log('界面上元素的内容:' + document.getElementById('h3').innerText)
    console.log('data 中的 msg 数据是:' + this.msg)
    // updated 事件执行的时候,页面和 data 数据已经保持同步了,都是最新的
    }
    });
    </script>
    </body>

    </html>
    ————————————————
    版权声明:本文为CSDN博主「熟悉的新风景」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_44797182/article/details/104653633

  • 相关阅读:
    Spring boot unable to determine jdbc url from datasouce
    Unable to create initial connections of pool. spring boot mysql
    spring boot MySQL Public Key Retrieval is not allowed
    spring boot no identifier specified for entity
    Establishing SSL connection without server's identity verification is not recommended
    eclipse unable to start within 45 seconds
    Oracle 数据库,远程访问 ora-12541:TNS:无监听程序
    macOS 下安装tomcat
    在macOS 上添加 JAVA_HOME 环境变量
    Maven2: Missing artifact but jars are in place
  • 原文地址:https://www.cnblogs.com/a1304908180/p/14789060.html
Copyright © 2011-2022 走看看