vue数据绑定远原理

Object.defineProperty 数据劫持,给每个属性设置了get、set。

class myvue {

constructor(options){

this.$options = options;

// 数据响应化

this.$data = options.data;

this.observe(this.$data);

}

observe(value) {

if(!value || typeof value !== ‘object‘){

return;

}

// 遍历该对象

Object.keys(value).forEach(key => {

this.defineReactive(value, key, value[key])

})

}

defineReactive(obj, key, val) {

this.observe(val); // 递归解决数据嵌套

Object.defineProperty(obj, key, {

get(){

return val;

},

set(newVal) {

if(newVal === val) {

return;

}

val = newVal;

console.log(`${key}属性更新了:${val}`);

}

})

}

}

原文地址:https://www.cnblogs.com/rclw/p/12105317.html

时间: 2024-10-11 08:22:28

vue数据绑定远原理的相关文章

自己实现 一个 Vue框架,包含了Vue的核心原理

Vue工作机制 vue工作机制 Vue响应式的原理 依赖收集与追踪 编译compile html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> </head> <body> <div id="app"> <!-- 插值绑定 --> <p>{{name}}<

vue的双向数据绑定实现原理(简单)

如果有人问你,学vue学到了什么,那双向数据绑定,是必然要说的. 我们都知道,在vue中,使用数据双向绑定我们都知道是v-modle实现的. 实现原理是通过Object.defineProperty的方法实现的. 这个方法接收三个参数 obj要在其上定义属性的对象.prop要定义或修改的属性的名称.descriptor将被定义或修改的属性描述符. 还有一些属性描述符 其中的俩个, get:不存在该属性时返回undefined 当访问这个属性的时候执行 有值是返回传进来的prop. set:不存在

[Vue源码]一起来学Vue双向绑定原理-数据劫持和发布订阅

有一段时间没有更新技术博文了,因为这段时间埋下头来看Vue源码了.本文我们一起通过学习双向绑定原理来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学Vue模板编译原理(一)-Template生成AST 一起来学Vue模板编译原理(二)-AST生成Render字符串 一起来学Vue虚拟DOM解析-Virtual Dom实现和Dom-diff算法 这些文章统一放在我的git仓库:https://github.com/yzsun

Vue数据绑定

gitHub地址:https://github.com/lily1010/vue_learn/tree/master/lesson04 一 双括号用来数据绑定 (1)写法一: {{message}},这种可以实时响应 (2)写法二: {{*message}},单次插值,今后的数据变化就不会再引起插值更新了 (3)双括号标签也可以用在属性上 举个栗子: <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q

自定义vue全局组件use使用(解释vue.use()的原理)

我们在前面学习到是用别人的组件:Vue.use(VueRouter).Vue.use(Mint)等等.其实使用的这些都是全剧组件,这里我们就来讲解一下怎么样定义一个全局组件,并解释vue.use()的原理而我们再用Axios做交互,则不能使用Vue.use(Axios),因为Axios没有install 自定义一个全局Loading组件,并使用:总结目录:|-components |-loading |-index.js 导出组件,并且install |-loading.vue 定义Loadin

深度解析 Vue 响应式原理

深度解析 Vue 响应式原理 该文章内容节选自团队的开源项目 InterviewMap.项目目前内容包含了 JS.网络.浏览器相关.性能优化.安全.框架.Git.数据结构.算法等内容,无论是基础还是进阶,亦或是源码解读,你都能在本图谱中得到满意的答案,希望这个面试图谱能够帮助到大家更好的准备面试. Vue 初始化 在 Vue 的初始化中,会先对 props 和 data 进行初始化 Vue.prototype._init = function(options?: Object) { // ...

深入Vue响应式原理

深入Vue.js响应式原理 一.创建一个Vue应用 new Vue({ data() { return { name: 'yjh', }; }, router, store, render: h => h(App), }).$mount('#app'); 二.实例化一个Vue应用到底发生了什么? this._init() callHook(vm, 'beforeCreate') observe(vm._data) vm._data = vm.$options.data() proxy(vm, _

vue响应式原理解析

# Vue响应式原理解析 首先定义了四个核心的js文件 - 1. observer.js 观察者函数,用来设置data的get和set函数,并且把watcher存放在dep中 - 2. watcher.js 监听者函数,用来设置dep.target开启依赖收集的条件,和触发视图的更新函数 - 3. compile.js 编译者函数,用来编译模版和实例化 watcher 函数 - 4. index.js 入口文件 注意dep函数就是一个壳子,用来存放watcher和触发watcher更新的 首先从

[Vue源码]一起来学Vue模板编译原理(一)-Template生成AST

本文我们一起通过学习Vue模板编译原理(一)-Template生成AST来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学Vue模板编译原理(一)-Template生成AST 一起来学Vue模板编译原理(二)-AST生成Render字符串 一起来学Vue虚拟DOM解析-Virtual Dom实现和Dom-diff算法 这些文章统一放在我的git仓库:https://github.com/yzsunlei/javascrip