详解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 相关文章推荐
Display SQL Server Login Mode
Jun 21 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
Jan 07 Javascript
用javascript替换URL中的参数值示例代码
Jan 27 Javascript
jQuery1.9+中删除了live以后的替代方法
Jun 17 Javascript
详解webpack性能优化——DLL
Oct 20 Javascript
JavaScript实现的超简单计算器功能示例
Dec 23 Javascript
详解CommonJS和ES6模块循环加载处理的区别
Dec 26 Javascript
详解vue路由篇(动态路由、路由嵌套)
Jan 27 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
Dec 25 Javascript
原生jQuery实现只显示年份下拉框
Dec 24 jQuery
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
Jan 29 Javascript
js不常见操作运算符总结
Nov 20 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
关于PHP开发的9条建议
2015/07/27 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
jQuery 性能优化指南(3)
2009/05/21 Javascript
jquery tools之tooltip
2009/07/25 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
angular bootstrap timepicker TypeError提示怎么办
2017/06/13 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
彻底理解js面向对象之继承
2018/02/04 Javascript
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
Python常见字符串操作函数小结【split()、join()、strip()】
2018/02/02 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
python读取Kafka实例
2019/12/23 Python
python 如何调用远程接口
2020/09/11 Python
Johnson Fitness澳大利亚:高级健身器材
2021/03/16 全球购物
浙大网新C/C++面试解惑
2015/05/27 面试题
便利店投资的创业计划书
2014/01/12 职场文书
新三好学生主要事迹
2014/01/23 职场文书
学校庆元旦歌咏比赛主持词
2014/03/18 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
社区创先争优承诺书
2014/08/30 职场文书
个人工作表现评价材料
2014/09/21 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
教师个人事迹材料
2014/12/17 职场文书
手术室消毒隔离制度
2015/08/05 职场文书
年终工作总结范文
2019/06/20 职场文书