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

    Vue-组件的生命周期

      Vue 实例在被创建时都要经过从创建挂载再到更新卸载的一系列过程,该过程中会运行一些叫做**生命周期钩子**的函数,可以让我们用自己注册的js方法控制整个大局,在这些事件响应方法中的this直接指向的是vue的实例

    一、钩子函数的执行时间

    1、beforeCreate

      在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用,

    2、created

      使用该组件,就会调用created方法 在created这个方法中可以操作后端的数据,数据响应视图
      应用: 发起ajax请求

    3、beforeMount

      挂载数据到DOM之前会调用:相关的 render 函数首次被调用。

    4、mounted

      挂载数据到DOM之后会调用  Vue 作用以后的DOM

    5、beforeUpdate

      在更新DOM之前 调用此钩子函数 应用:可以获取原始的DOM

    6、updated

      在更新DOM之后 调用此钩子函数 应用:可以获取最新的DOM

    7、beforeDestroy

       实例销毁之前调用。在这一步,实例仍然完全可用。

    8、destroyed

      Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 该钩子在服务器端渲染期间不被调用。

    还有两个特殊的(配合使用keep-alive):[activated](https://cn.vuejs.org/v2/api/#activated)、[deactivated](https://cn.vuejs.org/v2/api/#deactivated)

    9、 keep-alive组件被激活时调用

    10、deactivated

       keep-alive组件被停用时调用

    钩子函数中该做的事情

    created

    > 实例已经创建完成,因为它是最早触发的原因可以进行一些数据,资源的请求。

    mounted

    > 实例已经挂载完成,可以进行一些DOM操作

    beforeUpdate

    > 可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。

    updated

    > 可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。
    >
    > 该钩子在服务器端渲染期间不被调用。

    destroyed

    > 可以执行一些优化操作

    keep-alive

    > 在使用vue-router时有时需要使用<keep-alive></keep-alive>来缓存组件状态,这个时候created钩子就不会被重复调用了,如果我们的子组件需要在每次加载的时候进行某些操作,可以使用activated钩子触发。、

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <!-- <App></App> -->
        </div>
        <script src="js/vue.js"></script>
        <script type="text/javascript">
    
            /*
            生命周期的钩子函数   函数
            beforeCreate
            created
            beforeMount
            mounted
            beforeUpdate
            updated
            activated
            deactivated
            beforeDestroy
            destroyed
    
    
            */
            var Test = {
                data:function() {
                    return {
                        msg:'hello world'
                    }
                },
                template:`
                    <div>
                        <div>{{msg}}</div>
                        <button @click = 'changeHandler'>改变</button>
                    </div>
                `,
                methods:{
                    changeHandler(){
                        this.msg = this.msg +'哈哈哈';
                    }
                },
                beforeCreate:function() {
                    // 组件创建之前
                    console.log(this.msg);
                },
                created:function() {
                    // 组件创建之后
    
                    // 使用该组件,就会调用created方法 在created这个方法中可以操作后端的数据,数据响应视图
                    // 应用: 发起ajax请求
                    console.log(this.msg);
                    this.msg = '改变了吧'
                },
                beforeMount:function  () {
                    // 挂载数据到DOM之前会调用
                    console.log(document.getElementById('app'));
                },
                mounted:function() {
                    // 挂载数据到DOM之后会调用  Vue 作用以后的DOM
                    console.log(document.getElementById('app'));
                },
                beforeUpdate(){
                    // 在更新DOM之前 调用此钩子函数 应用:可以获取原始的DOM
                    console.log(document.getElementById('app').innerHTML);
                },
                updated(){
                    // 在更新DOM之后 调用此钩子函数 应用:可以获取最新的DOM
                    console.log(document.getElementById('app').innerHTML);
                },
                beforeDestroy(){
                    console.log('beforeDestroy');
                },
                destroyed(){
                    console.log('destroyed');
                },
                activated(){
                    console.log('组件被激活');
                },
                deactivated(){
                    console.log('组件被停用');
    
                }
    
            }
    
            var App = {
                data:function() {
                    return {
                        isShow:true
                    }
                },
                // Vue的内置组件,能在组件的切换过程中将状态保留在内存中父,防止重复渲染DOM
                template:`
                    <div class='app'>
                        <keep-alive>
                            <Test v-if = 'isShow'></Test>
                        </keep-alive>
                        <button @click = 'isShow = !isShow'>改变生死</button>
                    </div>
    
                `,
                components:{
                    Test
                },
                methods:{
    
                }
            }
            new Vue({
                el:'#app',
                data:function() {
                    return {
                        
                    }
                },
                template:`<App />`,
                components:{
                    App
                }
            });
        </script>
        
    
    </body>
    </html>
  • 相关阅读:
    P2380狗哥采矿(状态不易设计)
    P2320鬼谷子的钱袋(分治)
    树型背包(模板)
    Tarjan缩点割点(模板)
    最短路记录路径(模板)
    P1790 矩形分割(隐含的电风扇)
    P1725 琪露诺(单调队列优化)
    BZOJ3236: [Ahoi2013]作业
    BZOJ3809: Gty的二逼妹子序列
    BZOJ2190: [SDOI2008]仪仗队
  • 原文地址:https://www.cnblogs.com/xiaozhou223/p/11879454.html
Copyright © 2011-2022 走看看