详解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 相关文章推荐
jQuery的Ajax时无响应数据的解决方法
May 25 Javascript
基于jquery的网页SELECT下拉框美化代码
Oct 28 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
Apr 05 Javascript
jquery实现点击文字可编辑并修改保存至数据库
Apr 15 Javascript
纯Javascript实现ping功能的方法
Mar 20 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
May 28 Javascript
js合并两个数组生成合并后的key:value数组
May 09 Javascript
layui form表单提交之后重新加载数据表格的方法
Sep 11 Javascript
Vue 实例事件简单示例
Sep 19 Javascript
Vue实现按钮级权限方案
Nov 21 Javascript
Javascript表单序列化原理及实现代码详解
Oct 30 Javascript
js观察者模式的弹幕案例
Nov 23 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读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
php中adodbzip类实例
2014/12/08 PHP
PHPExcel导出2003和2007的excel文档功能示例
2017/01/04 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
JS替换字符串中字符即替换全部而不是第一个
2014/06/04 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
jQuery Validate表单验证深入学习
2015/12/18 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
2016/07/18 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
node.js中 redis 的安装和基本操作示例
2020/02/10 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
2020/06/04 Javascript
node中短信api实现验证码登录的示例代码
2021/01/20 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
python列表去重的二种方法
2014/02/14 Python
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
python3+PyQt5使用数据库表视图
2018/04/24 Python
Python如何调用JS文件中的函数
2019/08/16 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
2019/08/23 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
环保专业大学生职业规划设计
2014/01/10 职场文书
多媒体专业自我鉴定
2014/02/28 职场文书
霸王洗发水广告词
2014/03/14 职场文书
2014年预备党员端正入党动机思想汇报
2014/09/13 职场文书
医院护士见习期自我鉴定
2014/09/15 职场文书
校长个人总结
2015/03/03 职场文书