1. 首页
  2. 综合百科
  3. 钩子函数(vue生命周期钩子函数)

钩子函数(vue生命周期钩子函数)

简介:关于钩子函数(vue生命周期钩子函数)的相关疑问,相信很多朋友对此并不是非常清楚,为了帮助大家了解相关知识要点,小编为大家整理出如下讲解内容,希望下面的内容对大家有帮助!
如果有更好的建议或者想看更多关于综合百科技术大全及相关资讯,可以多多关注茶馆百科网。

#本文目录一览

1、Vue生命周期及钩子函数2、什么是钩子函数?钩子函数的使用。3、路由的钩子函数4、什么叫做钩子函数(易语言)5、路由钩子函数1Vue生命周期及钩子函数

其实生命周期就是指Vue实例创建的过程,从开始到销毁的过程。在这个过程中呢又分:开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列...在这个过程中呐,有一些***(函数)会被触发执行,也就是给了我们可以去编写逻辑的机会。

下面附一张Vue生命周期图

Vue生命周期一共有11个钩子函数,图中一共有8个钩子函数。在Vue实例被创建之后,Vue挂载元素阶段会有4个钩子函数,它们是自动执行的且只执行一次,数据更新阶段有2个钩子函数会被执行,销毁阶段有2个钩子会被执行,下面我们来详细看一看这8个钩子函数。

在实例初始化之后,数据观测(dataobserver)和event/watcher事件配置之前被调用。访问不到数据

在实例创建完成后被立即调用可以获取数据(常用作发送异步请求获取数据)

在挂载开始之前被调用可以访问数据编译模板结束,虚拟dom已经存在

可以拿到节点和数据 常用实例被挂载后调用.

注意:mounted 不会保证所有的子组件也都一起被挂载。如果你希望等到整个视图都渲染完毕,可以在 mounted 内部使用Vue实例.$nextTick:在Vue实例上有一个***,它会延迟执行,直到Dom加载完成.

补充:ref表示节点this.$refs.ref的标识就可以拿到节点了

数据更新时调用,发生在虚拟DOM打补丁之前。这里适合在更新之前访问现有的DOM,比如手动移除已添加的事件监听器。

常用的监控数据的变化由于数据更改导致的虚拟DOM重新渲染和打补丁

补充:watch是监控特定数据的变化,updated是监控组件里所有数据的变化

实例销毁之前调用,在这一步,实例仍然完全可用。 常用于清理资源,防止内存的泄露

实例销毁后调用。该钩子被调用后,对应Vue实例的所有指令都被解绑,所有的事件监听器被移除,所有的子实例也都被销毁。

 被keep-alive缓存的组件激活时调用。

被keep-alive缓存的组件停用时调用。

当捕获一个来自子孙组件的错误时被调用。

此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回 false 以阻止该错误继续向上传播。

那么Vue的11个声明周期函数就给大家简单介绍完毕了!你学会了嘛!!!

【详情请参照】

2什么是钩子函数?钩子函数的使用。

WINDOWS的钩子函数可以认为是WINDOWS的主要特性之一。利用它们,您可以捕捉您自己进程或其它进程发生的事件。通过“钩挂”,您可以给WINDOWS一个处理或过滤事件的回调函数,该函数也叫做“钩子函数”,当每次发生您感兴趣的事件时,WINDOWS都将调用该函数。一共有两种类型的钩子:局部的和***的。

局部钩子仅钩挂您自己进程的事件。

***的钩子还可以将钩挂其它进程发生的事件。***的钩子又有两种:

基于线程的它将捕获其它进程中某一特定线程的事件。简言之,就是可以用来观察其它进程中的某一特定线程将发生的事件。

系统范围的将捕捉系统中所有进程将发生的事件消息。当您创建一个钩子时,WINDOWS会先在内存中创建一个数据结构,该数据结构包含了钩子的相关信息,然后把该结构体加到已经存在的钩子链表中去。新的钩子将加到老的前面。当一个事件发生时,如果您安装的是一个局部钩子,您进程中的钩子函数将被调用。如果是一个***钩子,系统就必须把钩子函数插入到其它进程的地址空间,要做到这一点要求钩子函数必须在一个动态链接库中,所以如果您想要使用***钩子,就必须把该钩子函数放到动态链接库中去。当然有两个例外:工作日志钩子和工作日志回放钩子。这两个钩子的钩子函数必须在安装钩子的线程中。原因是:这两个钩子是用来监控比较底层的硬件事件的,既然是记录和回放,所有的事件就当然都是有先后次序的。所以如果把回调函数放在DLL中,输入的事件被放在几个线程中记录,所以我们无法保证得到正确的次序。故解决的办法是:把钩子函数放到单个的线程中,譬如安装钩子的线程。

钩子一共有14种,以下是它们被调用的时机:

WH_CALLWNDPROC当调用SendMessage时

WH_CALLWNDPROCRET当SendMessage的调用返回时

WH_GETMESSAGE当调用GetMessage或PeekMessage时

WH_KEYBOARD当调用GetMessage或PeekMessage来从消息队列中查询WM_KEYUP或WM_KEYDOWN消息时

WH_MOUSE当调用GetMessage或PeekMessage来从消息队列中查询鼠标事件消息时

WH_HARDWARE当调用GetMessage或PeekMessage来从消息队列种查询非鼠标、键盘消息时

WH_MSGFILTER当对话框、菜单或滚动条要处理一个消息时。该钩子是局部的。它时为那些有自己的消息处理过程的控件对象设计的。

WH_SY***SGFILTER和WH_MSGFILTER一样,只不过是系统范围的

WH_JOURNALRECORD当WINDOWS从硬件队列中获得消息时

WH_JOURNALPLAYBACK当一个事件从系统的硬件输入队列中被请求时

WH_SHELL当关于WINDOWS外壳事件发生时,譬如任务条需要重画它的按钮.

WH_C***当基于计算机的训练(C***)事件发生时

WH_FOREGROUNDIDLE由WINDOWS自己使用,一般的应用程序很少使用

WH_DEBUG用来给钩子函数除错

附:如何使用钩子函数(接收到字母A按下时,窗体由最小化弹出的完整的代码)

PublicDeclareFunctionCallNextHookExLib"user32"_

(ByValhHookAsLong,_

ByValnCodeAsLong,_

ByValwParamAsLong,_

ByVallParamAsLong)AsLong

PublicDeclareFunctionUnhookWindowsHookExLib"user32"_

(ByValhHookAsLong)AsLong

PublicDeclareFunctionSetWindowsHookExLib"user32"_

Alias"SetWindowsHookExA"_

(ByValidHookAsLong,_

ByVallpfnAsLong,_

ByValhmodAsLong,_

ByValdwThreadIdAsLong)AsLong

PublicConstWH_KEYBOARD=2

PublicConstKEY_WINSTART=91

PublicConstKEY_WINMENU=93

GlobalhHookAsLong

PublicFunctionKeyboardProc(ByValnCodeAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong

IfnCode=0Then

IfwParam=KEY_WINMENUOrwParam=KEY_WINSTARTThen

If(lParamAndHC0000000)=0Then

MsgBox"",,""

KeyboardProc=1

ExitFunction

EndIf

EndIf

EndIf

KeyboardProc=CallNextHookEx(hHook,nCode,wParam,lParam)

EndFunction

OptionExplicit

PrivateSubCommand1_Click()

form2.Show1

EndSub

PrivateSubform_Load()

hHook=SetWindowsHookEx(WH_KEYBOARD,AddressOfKeyboardProc,0,App.ThreadID)

Me.Show

EndSub

PrivateSubform_Unload(CancelAsInteger)

CallUnhookWindowsHookEx(hHook)

EndSub

3路由的钩子函数

vue组建级路由钩子函数介绍

路由钩子函数分为三种类型如下:

之一种:全局钩子函数。

router.beforeEach((to,from,next)={

console.log('beforeEach')

//next()//如果要跳转的话,一定要写上next()

//next(false)//取消了导航

next()//正常跳转,不写的话,不会跳转

})

router.afterEach((to,from)={//举例:通过跳转后改变document.title

if(to.meta.title){

window.document.title=to.meta.title//每个路由下title

}else{

window.document.title='默认的title'

}

})

第二种:针对单个路由钩子函数

beforeEnter(to,from,next){

console.log('beforeEnter')

next()//正常跳转,不写的话,不会跳转

}

第三种:组件级钩子函数

beforeRouteEnter(to,from,next){//这个路由钩子函数比生命周期beforeCreate函数先执行,所以this实例还没有创建出来

console.log("beforeRouteEnter")

console.log(this)//这时this还是undefinde,因为这个时候this实例还没有创建出来

next((vm)={//vm,可以这个vm这个参数来获取this实例,接着就可以做修改了

vm.text='改变了'

})

},

beforeRouteUpdate(to,from,next){//可以解决二级导航时,页面只渲染一次的问题,也就是导航是否更新了,是否需要更新

console.log('beforeRouteUpdate')

next();

},

beforeRouteLeave(to,from,next){//当离开组件时,是否允许离开

next()

}

4什么叫做钩子函数(易语言)

钩子函数是用来给系统回调的.简单的说就是你注册一个钩子以后.发生钩子注册的事件.系统就调用你注册的钩子函数并传递参数给你.比如你注册了一个键盘钩子,当用户按下XX键的时候系统就调用你注册的钩子函数.并且把用户按下了哪些键当作参数传递过来.XX小马就是用这个来邪恶的

麻烦采纳,谢谢!

5路由钩子函数

全局钩子函数:

beforeEach:

beforeEach一共接收三个参数,分别是to、from、next;to:即将进入的路由对象;from:正要离开的路由对象;next:路由的控制参数;

next一共有四种调用方式:

next():一切正常调用这个***进入下一个钩子;

next(false):取消路由导航,这时的url显示的是正要离开的路由地址;

next('/login'):当前路由被终止,进入一个新的路由导航(路由地址可以自由指定)

next(error):路由导航终止并且错误会被传递到router.onError()注册过的回调中;

我们一般是用全局钩子来控制权限,像什么进页面没有登录就跳登录页,需要用户达到什么级别才能访问当前页面都是属于页面权限控制,都是可以通过beforeEach钩子函数来实现

AfterEach:

AfterEach和beforeEach一样都是属于全局守卫钩子,都是在main.js中进行调用;其中AfterEach比beforeEach少一个next参数;

to:即将要进入的路由对象;

from:正要离开的路由对象;

afterEach()我们一般用来重置页面滚动条位置:

假如我们有一个页面很长,滚动后其中的某个位置后跳转,这时新的页面的滚动条位置就会在上一个页面停留的位置;这个时候我们就可以利用afterEach进行重置:

组件内的钩子函数:

beforeRouteEnter(to,from,next):

在路由进入前调用,因为此时的vue实例还没有创建,所以beforeEnter是唯一一个不能使用this的钩子函数;

to:即将要进入的路由对象;

from:正要离开的路由对象;

next:路由控制参数

beforeRouteUpdate(to,from,next):

在路由发生修改的时候进行调用,比如我们上一篇文章讲到的动态路由传参,这种情况我们的beforeRouteUpdate也是会被调用的;

to:即将要进入的路由对象;

from:正要离开的路由对象;

next:路由控制参数;

beforeRouteLeave(to,from,next):

在路由离开该组件时调用;

to:即将要进入的路由对象;

from:正要离开的路由对象;

next:路由控制参数

注意:beforeRouteEnter因为触发的时候vue实例还没有创建,所以这个钩子函数中不能使用this,而beforeRouteUpdate和beforeRouteLeave都是可以访问到实例的,因为当这两个函数触发的时候实例都已经被创建了;

钩子函数和vue生命周期钩子函数的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

本文主要介绍了关于钩子函数(vue生命周期钩子函数)的相关养殖或种植技术,综合百科栏目还介绍了该行业生产经营方式及经营管理,关注综合百科发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解综合百科技术怎么管理的要点,是您综合百科致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://23.234.50.4:8411/article/225294.html