详解Vue源码学习之callHook钩子函数


Posted in Javascript onJuly 25, 2018

Vue实例在不同的生命周期阶段,都调用了callHook方法。比如在实例初始化(_init)的时候调用callHook(vm, 'beforeCreate')和callHook(vm, 'created')。

详解Vue源码学习之callHook钩子函数

这里的"beforeCreate","created"状态并非随意定义,而是来自于Vue内部的定义的生命周期钩子。

var LIFECYCLE_HOOKS = [
 'beforeCreate',
 'created',
 'beforeMount',
 'mounted',
 'beforeUpdate',
 'updated',
 'beforeDestroy',
 'destroyed',
 'activated',
 'deactivated',
 'errorCaptured'
];

再研究Vue官网的生命周期图示,是不是更容易理解了。

详解Vue源码学习之callHook钩子函数

接下来我们来看一下Vue中实现钩子函数的源码:

function callHook (vm, hook) {
 // #7573 disable dep collection when invoking lifecycle hooks
 pushTarget();
 var handlers = vm.$options[hook];
 if (handlers) {
  for (var i = 0, j = handlers.length; i < j; i++) {
   try {
    handlers[i].call(vm);
   } catch (e) {
    handleError(e, vm, (hook + " hook"));
   }
  }
 }
 if (vm._hasHookEvent) {
  vm.$emit('hook:' + hook);
 }
 popTarget();
}

举个例子说明:

let test = new Vue({
           data: {
              a: 1
           },
           created: function () {
            console.log("这里是Created");
           }
        });

实例化一个Vue组件test,给test定义了数据data,以及created方法。而在实例化组件的时候,Vue内部调用了callHook(vm,'created')(上文已说明)。执行callHook函数的时候,Vue在test组件的$options中查找created是否存在,如果存在的话就执行created相对应的方法。这里就会执行console.log("这里是Created")。

callHook的作用就是执行用户自定义的钩子函数,并将钩子中this指向指为当前组件实例。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
推荐40个简单的 jQuery 导航插件和教程(下篇)
Sep 14 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
Apr 01 Javascript
js 走马灯简单实例
Nov 21 Javascript
jQuery获取标签文本内容和html内容的方法
Mar 27 Javascript
Jquery结合HTML5实现文件上传
Jun 25 Javascript
浅谈js的异步执行
Oct 18 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
Dec 07 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
Jan 30 Javascript
解决vue热替换失效的根本原因
Sep 19 Javascript
微信小程序点击滚动到指定位置的实现
May 22 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
Jul 31 Javascript
关于ES6尾调用优化的使用
Sep 11 Javascript
详解操作虚拟dom模拟react视图渲染
Jul 25 #Javascript
浅析JS中回调函数及用法
Jul 25 #Javascript
详解使用mpvue开发github小程序总结
Jul 25 #Javascript
详解mpvue开发小程序小总结
Jul 25 #Javascript
Bootstrap table表格初始化表格数据的方法
Jul 25 #Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
Jul 24 #Javascript
微信小程序实现图片上传放大预览删除代码
Jun 28 #Javascript
You might like
常用的php ADODB使用方法集锦
2008/03/25 PHP
php实现从上传文件创建缩略图的方法
2015/04/02 PHP
总结PHP中初始化空数组的最佳方法
2019/02/13 PHP
php 利用socket发送GET,POST请求的实例代码
2020/07/04 PHP
jQuery选择器全面总结
2014/01/06 Javascript
浅谈Sizzle的“编译原理”
2015/04/14 Javascript
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
如何使用angularJs
2017/05/08 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
webpack下实现动态引入文件方法
2018/02/22 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
vue 动态绑定背景图片的方法
2018/08/10 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
python获取指定路径下所有指定后缀文件的方法
2015/05/26 Python
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
pandas的object对象转时间对象的方法
2018/04/11 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
工程专业求职自荐书范文
2014/02/08 职场文书
文明村创建实施方案
2014/03/27 职场文书
迎新生标语大全
2014/10/06 职场文书
工程催款通知书
2015/04/17 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
2015年前台文员工作总结
2015/05/18 职场文书
单位综合评价意见
2015/06/05 职场文书
python如何利用traceback获取详细的异常信息
2021/06/05 Python
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android
Nginx报404错误的详细解决方法
2022/07/23 Servers