1
0
Fork 0
Browse Source

vault backup: 2022-05-07 23:23:15

master
YuJian920 3 years ago
parent
commit
6ee735ac6a
  1. BIN
      随时随地/Images/welcome-to-vue.png
  2. 4
      随时随地/Yan Ruyu_Vue学习笔记.md
  3. 20
      随时随地/通过源代码解析Vue 中的 $on、$emit 实现原理.md

BIN
随时随地/Images/welcome-to-vue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

4
随时随地/Yan Ruyu_Vue学习笔记.md

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
![](/images/welcome-to-vue.png)
![[welcome-to-vue.png]]
### Vue基本认知
@ -31,8 +31,6 @@ Vue在实例生成之前和生成之后总共有8个生命周期函数,他们 @@ -31,8 +31,6 @@ Vue在实例生成之前和生成之后总共有8个生命周期函数,他们
* `beforeDestroy`:实例销毁之前
* `destroyed`:实例销毁之后
<!--more-->
#### Vue的模板语法
Vue中的模板语法有插值表达式、`v-text`、`v-html`等等。

20
随时随地/通过源代码解析Vue 中的 $on、$emit 实现原理.md

@ -8,36 +8,36 @@ @@ -8,36 +8,36 @@
## 正式开始
#### $on绑定事件
### \$on绑定事件
> Vue中的$on是一种将函数与事件绑定的方法。
> Vue中的\$on是一种将函数与事件绑定的方法。
通过Vue的源代码可以看到,$on调用时需要两个参数,第一个是字符串或数组类型作为事件的名称,第二个是触发事件执行的回调函数。$on第一步会对第一个参数做一个是否为数组的判断,这里可以看出$on允许为多个事件绑定同一个回调函数。
通过Vue的源代码可以看到,\$on 调用时需要两个参数,第一个是字符串或数组类型作为事件的名称,第二个是触发事件执行的回调函数。\$on 第一步会对第一个参数做一个是否为数组的判断,这里可以看出 \$on 允许为多个事件绑定同一个回调函数。
如果参数为数组,那么它会使用for遍历这个数组,并进行递归。
如果参数为字符串,那么它会在已有的事件(_events)中寻找是否已经存在相同的事件,如果没有会创建并初始化为空数组同时将传递的第二个参数也就是事件被触发时需要执行的回调函数添加进去。
如果参数为字符串,那么它会在已有的事件(\_events)中寻找是否已经存在相同的事件,如果没有会创建并初始化为空数组同时将传递的第二个参数也就是事件被触发时需要执行的回调函数添加进去。
![$on方法](/images/$on方法.png)
![[$on方法.png]]
> 总结:$on方法允许为多个事件绑定同一个回调函数,还在里面使用了递归~~自己日自己~~
#### $emit 触发事件
### $emit 触发事件
> Vue中的$emit是一种触发事件的方法。
它接受的第一个参数是一个字符串类型,这个字符串参数也就是需要触发的事件名称,第二个参数是触发事件时需要传递的数据。
第一步$emit会将传递的事件名称转换成小写,并进行一系列的检查判断是否符合语法标准,然后它会在事件列表(_events)中寻找事件对应的回调函数,也就是在$on中传递并添加的回调函数,这里如果没有找到会直接返回,找到了会先进行一次判断,判断回调函数是否大于1,如果大于就把它转换成一个数组。
第一步\$emit会将传递的事件名称转换成小写,并进行一系列的检查判断是否符合语法标准,然后它会在事件列表(\_events)中寻找事件对应的回调函数,也就是在\$on中传递并添加的回调函数,这里如果没有找到会直接返回,找到了会先进行一次判断,判断回调函数是否大于1,如果大于就把它转换成一个数组。
这时候第一个参数事件名已经不再需要了,$emit会将其舍弃,并把剩下的数据转换成数组。传递给一个带有try&catch的invokeWithErrorHandling()方法,并在其中使用apply()或call()来调用事件回调函数。
这时候第一个参数事件名已经不再需要了,\$emit会将其舍弃,并把剩下的数据转换成数组。传递给一个带有 try&catch invokeWithErrorHandling() 方法,并在其中使用apply() call() 来调用事件回调函数。
![调用invokeWithErrorHandling方法](/images/调用invokeWithErrorHandling方法.png)
![[调用invokeWithErrorHandling方法.png]]
**invokeWithErrorHandling()方法源代码**
![invokeWithErrorHandling方法](/images/invokeWithErrorHandling方法.png)
![[invokeWithErrorHandling方法.png]]
> 总结:用$emit方法触发事件允许一个事件有多个回调函数,它们会变成数组被遍历,同时也允许携带参数,它使用了apply()或call()更改作用域来保证参数有效

Loading…
Cancel
Save