详解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 相关文章推荐
JavaScript定义类或函数的几种方式小结
Jan 09 Javascript
在浏览器窗口上添加遮罩层的方法
Nov 12 Javascript
javascript判断机器是否联网的2种方法
Aug 09 Javascript
JavaScript中的6种运算符总结
Oct 16 Javascript
JavaScript访问字符串中单个字符的两种方法
Jul 03 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
May 03 Javascript
Vue.js Ajax动态参数与列表显示实现方法
Oct 20 Javascript
Bootstrap显示与隐藏简单实现代码
Mar 06 Javascript
AngularJS 验证码60秒倒计时功能的实现
Jun 05 Javascript
js中document.write和document.writeln的区别
Mar 11 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
Feb 27 Javascript
微信小程序入门之绘制时钟
Oct 22 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写的小东西
2006/12/06 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
2014/02/13 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
javascript Select标记中options操作方法集合
2008/10/22 Javascript
javascript 文档的编码问题解决
2009/03/01 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
2016/03/30 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
2017/07/27 Javascript
jQuery实现使用sort方法对json数据排序的方法
2018/04/17 jQuery
Vue隐藏显示、只读实例代码
2018/07/18 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
2014/07/14 Python
有趣的python小程序分享
2017/12/05 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
2019/08/06 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
python利用tkinter实现图片格式转换的示例
2020/09/28 Python
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
升旗仪式演讲稿
2014/05/08 职场文书
2014年设计师工作总结
2014/11/25 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python