详解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 firefox 自动加载iframe 自动调整高宽示例
Aug 27 Javascript
jQuery 快速结束当前正在执行的动画
Nov 20 Javascript
javascript对象的使用和属性操作示例详解
Mar 02 Javascript
Js可拖拽放大的层拖动特效实现方法
Feb 25 Javascript
谈谈impress.js初步理解
Sep 09 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
Jan 08 Javascript
vue.js学习笔记:如何加载本地json文件
Jan 17 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
Feb 07 Javascript
angular中实现控制器之间传递参数的方式
Apr 24 Javascript
Centos6.8下Node.js安装教程
May 12 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
Jul 27 Javascript
js中的面向对象之对象常见创建方法详解
Dec 16 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
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
2009/11/04 Javascript
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
Javascript动态绑定事件的简单实现代码
2010/12/25 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
JavaScript中实现依赖注入的思路分享
2015/01/15 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
JS实现页面进入和返回定位到具体位置
2016/12/08 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
vue服务端渲染的实例代码
2017/08/28 Javascript
WebStorm ES6 语法支持设置&amp;babel使用及自动编译(详解)
2017/09/08 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
Python备份Mysql脚本
2008/08/11 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
Python3实现的字典遍历操作详解
2018/04/18 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
利达恒信公司.NET笔试题面试题
2016/03/05 面试题
Jdbc数据访问技术面试题
2012/03/30 面试题
志愿者事迹材料
2014/12/26 职场文书
升学宴家长答谢词
2015/09/29 职场文书
导游词之韩国济州岛
2019/10/28 职场文书
pytorch DataLoader的num_workers参数与设置大小详解
2021/05/28 Python