详解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 相关文章推荐
js过滤数组重复元素的方法
Sep 05 Javascript
扩展JS Date对象时间格式化功能的小例子
Dec 02 Javascript
window.location.href IE下跳转失效的解决方法
Mar 27 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
Apr 01 Javascript
JS中artdialog弹出框控件之提交表单思路详解
Apr 18 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
Feb 09 Javascript
基于vue2的table分页组件实现方法
Mar 20 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
Apr 10 jQuery
vue实现点击图片放大效果
Aug 15 Javascript
基于vue cli 通过命令行传参实现多环境配置
Jul 12 Javascript
使用异步组件优化Vue应用程序的性能
Apr 28 Javascript
Electron实现应用打包、自动升级过程解析
Jul 07 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+ACCESS 文章管理程序代码
2010/06/21 PHP
php中生成随机密码的自定义函数代码
2013/10/21 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
从新浪弄下来的全屏广告代码 与使用说明
2007/03/15 Javascript
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
一个JQuery操作Table的代码分享
2012/03/30 Javascript
javascript作用域容易记错的两个地方分析
2012/06/22 Javascript
javascript操作css属性
2013/12/30 Javascript
js的2种继承方式详解
2014/03/04 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
js 两个日期比较相差多少天的实例
2017/10/19 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
微信小程序页面上下滚动效果
2020/11/18 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
js+audio实现音乐播放器
2020/09/13 Javascript
centos6.7安装python2.7.11的具体方法
2017/01/16 Python
python Spyder界面无法打开的解决方法
2018/04/27 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
2019/04/29 Python
Python sorted排序方法如何实现
2020/03/31 Python
Python通过fnmatch模块实现文件名匹配
2020/09/30 Python
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
行政专员工作职责
2013/12/22 职场文书
文明礼仪事迹材料
2014/01/09 职场文书
经济职业学院毕业生自荐书
2014/03/17 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
幼儿园八一建军节活动方案
2014/08/27 职场文书
工资收入证明
2014/10/07 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server
Go 语言中 20 个占位符的整理
2021/10/16 Golang