加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

watch案例解析(element-ui el-select 无法选中问题剖析)

发布时间:2020-12-16 23:15:29 所属栏目:百科 来源:网络整理
导读:p class="jhl-title" fire 读在最前面: 1、此文章衔接,相关整体知识点请先阅读后再继续本文阅读 问:子组件中明明有watch value,为什么this.$emit('input',888);没有触发watch回调,反而在父组件data数据变化后触发回调? var child = Vue.extend({ templa

<p class="jhl-title">fire

读在最前面:

  1、此文章衔接,相关整体知识点请先阅读后再继续本文阅读

问:子组件中明明有watch value,为什么this.$emit('input',888);没有触发watch回调,反而在父组件data数据变化后触发回调?

var child = Vue.extend({ template: '

数据响应及render相关-案例说明

',props: { value: { required: true } },mounted() { this.$emit('input',888); },watch: { value(val,oldVal) { console.log(val,oldVal,'child') } } });

如下图:

关键执行顺序分析:

1、子组件this.$emit('input',888)执行

2、父组件执行这段代码,settime 去更新父组件值

{ this.a = 3 },1000) }

3、settime执行后,触发父组件a的set -> 触发watch -> 触发vm.render ->? 触发patch-> 触发 validPros -> 触发子组件pros更新 -> 触发value更新 ->回调watch

大致流程如下图

el-select 中也是实现了watch value(详见源码),所以在父级中引用组件时v-model值没有在data中申明的情况下,可能出现切换选择项没有反应,当其他data值变化时,导致render渲染,select就会自动选中的异常

<div class="jhl-desc">

备注:  

 ? 1、observe不会对不在data中的数据进行处理

? ? ? 2、页面更新时,会执行render,所有的数据绑定会在内存中再次执行,包括{{xxx}},{{methods}},{{computed}} 等,生成新的vnode

? ? ? 3、一个时间周期中的数据更新,非立即执行的watcher,都会统一进入queueWatcher,在下个tick进行执行

  ?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读