vue数据双向绑定原理解析(get & set)
发布时间 - 2026-01-11 00:03:13 点击率:次前端的数据双向绑定指的是view(视图)和model(数据)两者之间的关系;view层是页面上展示给用户看的信息,model层一般是指通过http请求从后台返回的数据。view到model的绑定都是通过事件回调函数操作的,model到view的绑定有多种方法。

angular,react,vue等mv*模式的框架都实现了数据双向绑定;angular是通过脏检查即新老数据的比较来确定哪些数据发生了变化,从而将它更新到view中;vue则是通过设置数据的get和set函数来实现的,这种方式在性能上是优于angular的。
下面代码是一个简单的定义数据get和set方法的例子,set和get方法分别在数据改变和访问的时候被调用,能够监听数据的变化:
// 数据绑定的构造函数
function Observer(data) {
this.data = data;
for(var key in data) {
if(data.hasOwnProperty(key)) {
var val = data[key];
if(typeof data[key] === "object"){
// 如果值不为原始类型,则继续递归
new Observer(val);
}else {
this.convert(key, val);
}
}
}
}
// 定义set 和 get函数
Observer.prototype.convert = function(key, val) {
Object.defineProperty(this.data, key, {
enumerable: true,
confingurable: true,
get: function() {
console.log(key + "被访问了");
return val;
},
set: function(newVal) {
console.log(key + "被设置了新值" + newVal);
val = newVal;
}
});
}
var app = new Observer({name: "xieshuai", age: 24, address: {city: "shenzheng"}});
app.data.name; // name被访问了
app.data.age = 18; // age被设置了新值18
Object.defineProperty,这是ES6新增的方法,通过这个方法,可以自定义getter和setter函数。
上面的代码只是个简单的例子,并没有处理数组的情况;不过这是vue实现数据双向绑定的核心。
本文到此结束,文中若有不对之处,还望指正。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# vuejs数据双向绑定
# vue.js双向绑定
# vue数据绑定
# vue中的双向数据绑定原理与常见操作技巧详解
# Vue双向绑定实现原理与方法详解
# vue数组双向绑定问题及$set用法说明
# 绑定
# 这是
# 递归
# 都是
# 是一个
# 是个
# 之处
# 则是
# 是指
# 有多
# 自定义
# 不为
# 种方法
# 若有
# 将它
# 新老
# 到此
# 指的是
# 来实现
# 回调
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
如何在云主机上快速搭建网站?
Laravel如何使用Eloquent进行子查询
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
如何在建站主机中优化服务器配置?
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Android 常见的图片加载框架详细介绍
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
Laravel模型事件有哪些_Laravel Model Event生命周期详解
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
Android中AutoCompleteTextView自动提示
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
如何在宝塔面板中修改默认建站目录?
php结合redis实现高并发下的抢购、秒杀功能的实例
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
高防服务器租用指南:配置选择与快速部署攻略
网易LOFTER官网链接 老福特网页版登录地址
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
如何利用DOS批处理实现定时关机操作详解
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
Python高阶函数应用_函数作为参数说明【指导】
html如何与html链接_实现多个HTML页面互相链接【互相】
制作企业网站建设方案,怎样建设一个公司网站?
详解Android图表 MPAndroidChart折线图
微信小程序 wx.uploadFile无法上传解决办法
linux写shell需要注意的问题(必看)
如何获取免费开源的自助建站系统源码?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
IOS倒计时设置UIButton标题title的抖动问题
php 三元运算符实例详细介绍
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
Laravel如何创建自定义Artisan命令?(代码示例)
Linux系统命令中tree命令详解
如何用IIS7快速搭建并优化网站站点?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
如何在IIS7中新建站点?详细步骤解析
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
独立制作一个网站多少钱,建立网站需要花多少钱?
上一篇:ThinkPHP5中的事务操作
上一篇:ThinkPHP5中的事务操作

