面试题 请简述vue双向数据绑定原理
MVVM模式
MVVM模式就是Model–View–ViewModel模式。它实现了View的变动,自动反映在 ViewModel,反之亦然。就是在单向绑定的基础上给可输入元素(input、textare等)添加了change(input)事件,(change事件触发,View的状态就被更新了)来动态修改model。
双向绑定原理
vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的。
实现数据的双向绑定,首先要对数据进行劫持监听,所以我们需要设置一个监听器Observer,用来监听所有属性。如果属性发上变化了,就需要告诉订阅者Watcher看是否需要更新。因为订阅者是有很多个,所以我们需要有一个消息订阅器Dep来专门收集这些订阅者,然后在监听器Observer和订阅者Watcher之间进行统一管理的。接着,我们还需要有一个指令解析器Compile,对每个节点元素进行扫描和解析,将相关指令(如v-model,v-on)对应初始化成一个订阅者Watcher,并替换模板数据或者绑定相应的函数,此时当订阅者Watcher接收到相应属性的变化,就会执行对应的更新函数,从而更新视图。
总结成三个步骤
1.实现一个监听器Observer,用来劫持并监听所有属性,如果有变动的,就通知订阅者。
2.实现一个订阅者Watcher,每一个Watcher都绑定一个更新函数,watcher可以收到属性的变化通知并执行相应的函数,从而更新视图。
3.实现一个解析器Compile,可以扫描和解析每个节点的相关指令(v-model,v-on等指令),如果节点存在v-model,v-on等指令,则解析器Compile初始化这类节点的模板数据,使之可以显示在视图上,然后初始化相应的订阅者(Watcher)。
面试题 请简述vue双向数据绑定原理相关推荐
- 分析Vue双向数据绑定原理以及简单实现MVVM
前言 随着Vue的火热发展,越来越多的程序员并不满足于对框架的使用,更多地追求其内在的原理,就像不能沉沦于美丽的外表,更应该追求灵魂的高度. 正文 好了,废话不多说,接下来我们将通过俩方面开展我们对外 ...
- vue双向数据绑定原理分析--Mr.Ember
vue双向数据绑定原理分析 摘要 vue常用,但原理常常不理解,下面我们来具体分析下vue的双向数据绑定原理. (1)创建一个vue对象,实现一个数据监听器observer,对所有数据对象属性进行监听 ...
- vue双向数据绑定原理 1
1. 原理 1.1 vue双向数据绑定原理,又称vue响应式原理,是vue的核心,双向数据绑定是通过数据劫持结合发布订阅模式的方式来实现的,也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化 ...
- Vue 双向数据绑定原理
原理 1.vue双向数据绑定原理,又称vue响应式原理,是vue的核心,双向数据绑定是通过数据劫持结合发布者订阅者模式的方式来实现的,通过Object.defineProperty()来劫持各个属性的 ...
- 前端面试题 HTML5 CSS3(盒子模型、盒子水平垂直居中、经典布局) JS(闭包、深浅克隆、数据劫持和拦截) 算法(排序、去重、数组扁平化) Vue(双向数据绑定原理、通信方式)
前端面试题 HTML5 相关面试题 CSS3 相关面试题 盒子模型 盒子水平垂直居中的方案 经典布局方案 圣杯布局 双飞翼布局 flex布局 定位方式布局 css实现三角形 JS 相关面试题 8种数据 ...
- “别具一格”的vue双向数据绑定原理
背景和一点点看法 见网上许多文章讲vue双向数据绑定一开口就大谈 Object.defineProperty 和 proxy.其实不然.这是vue中响应式的"基石". vue 中有 ...
- 请这样回答双向数据绑定原理
前言 双向数据绑定是Vue的重要原理,也是面试过程中几乎必问的一道题目,搞懂这个原理无论是对我们的技术提高还是对面试都是有百利而无一害的,下面就让我们一起来解决这个问题吧~ 双向数据绑定每一个模块都负 ...
- 理解VUE双向数据绑定原理和实现
一.原理: 1.vue 双向数据绑定是通过 数据劫持 结合 发布订阅模式的方式来实现的, 也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变: 2.核心:关于VUE双向数 ...
- vue双向数据绑定原理学习
vue源码 1.双向数据绑定 学习数组的reduce函数 var arr = [2,4,5,67,78,5,1] // arr.reduce(函数,初始值) // arr.reduce((上次的初始值 ...
最新文章
- python初学者web还是爬虫-还在纠结学爬虫还是数据分析,不如看看这篇文章
- 【译】在您的应用中安全使用Android的篡改检测 (Using Android's tamper detection securely in your app)
- 语义分割 - 数据集准备
- 2013.10u-boot移植之SD保存环境变量
- OpenCV自带dnn的Example研究(3)— object_detection
- Django基本命令
- 【知识积累】DES算法之C#加密Java解密
- 计算机技术在生物学中的应用鲁东大学,生物科学与技术学院
- App Store上的健身应用
- YiDB在翼支付账单业务的应用实践
- vs2013下git的使用
- uniapp调用手机摄像头_uniapp原生插件开发之调用原生方法(android)
- Mac 配置 docker 基本操作
- 内存优化(一)浅谈内存优化
- IPD管理体系中的产品和技术研发执行团队
- ARM linux 的原子操作分析
- 绩效考核-项目经理绩效考核指标
- 【面试】浪潮第一次技术面试过程
- 如何MATLAB实现用ARIMA模型输出参数实施预测
- 教育邮箱怎么注册申请,教育电子邮箱注册小妙招
热门文章
- 惊!面试现场,简单几道java算法题,90%程序员没写出来
- 【NDN VANET】Rapid Traffic Information Dissemination Using Named Data 学习笔记
- SSL 2406 2408 约数 比萨
- 轨道交通 地面通信设备绝缘耐压的要求
- 设计模式之组合模式详解(附应用举例实现)
- 【空气质量数据分析专题九】污染物浓度小时变化分析
- 2021年G3锅炉水处理考试试卷及G3锅炉水处理模拟考试题
- 软文的写作四大策略及技巧
- 360 se html document html,360浏览器使用meta标签强制使用指定内核
- Python实现汉诺塔算法