vue生命周期小记

在这里插入图片描述

1.beforeCreate 和 created

这两个钩子函数用在vue组件创建时开始调用,处在vue分配数据节点前后,如下测试代码:

<body>
    <div id="app"></div>

    <script src="dist/vue.js"></script>
    <script>
        var MyComponent = {
            template: `
                <div>
                    <p>{{ message }}</p>    
                </div>
            `,
            data: function() {
                return {
                    message: 'Hello Vue'
                }
            },
            beforeCreate: function() {
                console.log(this.message);
            },
            created: function() {
                console.log(this.message);
            }
        }

        var vm = new Vue({
            el: '#app',
            components: {
                'my-component': MyComponent
            },
            template: '<my-component/>'
        });
    </script>
</body>

输出结果:
在这里插入图片描述

  • beforeCreate 时候vue还没分配数据,所以取不到插件data里面的值
  • created 时vue已经结束数据配置,实例化了vue对象
  • 应用:created 一般用来ajax请求后台数据,初始化插件数据
2. beforeMount 和 mounted

在两个钩子函数在vue挂在到dom时节点的前后触发

{
	beforeMount: function() {
	    console.log(document.getElementsByTagName('div')[0]);
	},
	mounted: function() {
	    console.log(document.getElementsByTagName('div')[0]);
	}
}

输出结果:
在这里插入图片描述

  • beforeMount 主要是获取vue挂载前的原dom
  • mounted 是主要获取vue挂载后的dom,这两个函数都是值触发一次
3. beforeUpdate 和 updated

这两个钩子函数发生在修改vue组件data数据渲染dom视图的节点前后,如下代码:

{
   beforeUpdate: function() {
       console.log('修改数据之前的dom');
       console.log(document.body.children[0].outerHTML);
   },
   updated: function() {
       console.log('修改数据之后的dom');
       console.log(document.body.children[0].outerHTML);
   }
}

输出结果:
在这里插入图片描述

  • beforeUpdate 主要是获取修改数据后vue重新渲染视图前的dom数据,而 update 刚好相发
4. beforeDestroy 和 destroyed

这两个钩子函数发生在组件销毁节点的前后,如下代码

  <script>
      var MyComponent = {
          template: `
              <div>
                  <p>{{ message }}</p>  
              </div>
          `,
          data: function() {
              return {
                  message: 'Hello Vue'
              }
          },
          beforeCreate: function() {
              console.log(this.message);
          },
          created: function() {
              console.log(this.message);
          },
          beforeDestroy: function() {
              console.log('beforeDestory');
          },
          destroyed: function() {
              console.log('destoryed');
          }
      }

      var vm = new Vue({
          el: '#app',
          components: {
              'my-component': MyComponent
          },
          template: '<my-component v-if="isExsit"></my-component>',
          data: function() {
              return {
                  isExsit: true
              }
          }
      });
  </script>

输入如下:
在这里插入图片描述

  • beforeDestroy主要是拿到组件销毁前的数据,进行本地缓存等操作
  • destroyed一般是销毁事件,释放内存等操作
5. deactivated 和 activated

一般我们不会去频繁的创建和销毁组件,用的比较多得是去启用和停用组件。所以这两个钩子分别用在停用和启用组件后触发。v-if 为了不让组件销毁,要把组件包裹在vue的内置组件 keep-alive 里面,如下测试代码:

 <script>
      var MyComponent = {
          template: `
              <div>
                  <p>{{ message }}</p>  
              </div>
          `,
          data: function() {
              return {
                  message: 'Hello Vue'
              }
          },
          beforeCreate: function() {
              console.log(this.message);
          },
          created: function() {
              console.log(this.message);
          },
          beforeDestroy: function() {
              console.log('beforeDestory');
          },
          destroyed: function() {
              console.log('destoryed');
          },
          deactivated: function() {
              console.log('组件被停用');
          },
          activated: function() {
              console.log('组件被激活');
          }
      }

      var vm = new Vue({
          el: '#app',
          components: {
              'my-component': MyComponent
          },
          template: `
          <keep-alive>
              <my-component v-if="isExsit"></my-component>
          </keep-alive>    
          `,
          data: function() {
              return {
                  isExsit: true
              }
          }
      });
  </script>

输出结果如下:
在这里插入图片描述

  • keep-alive 只能和 v-if 嵌套,嵌套后组件不在被销毁,销毁钩子函数不再被调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值