vue动态数据绑定2---响应数据变化

vue动态数据绑定3--深层次数据变化逐层往上传播 基于vue动态数据绑定2,再多考虑一个问题:”深层次数据变化如何逐层往上传播”。举个例子。let app = new Observer({ name: { first: 'yy', last: 'jm' }, age: 18 });app2.$watch('name', function (newName) { console.log( 阅读详情

在动态数据绑定1的基础上,考虑传递回调函数。在实际应用中,当特定数据发生改变的时候,我们是希望做一些特定的事情的,而不是每一次都只能打印出一些信息。所以,我们需要支持传入回调函数的功能。举个例子。

let app = new Observer({
         name: 'yjm',
         age: 20
 });

 // 你需要实现 $watch 这个 API
 app1.$watch('age', function(age) {
         console.log(`我的年纪变了,现在已经是:${age}岁了`)
 });

 app1.data.age = 100; // 输出:'我的年纪变了,现在已经是100岁了'

要实现上述功能,首先要监听数据的变化,将被监听的数据对象及相应的回调函数放到一个对象events里,当数据变化之后,再从events里拿出被触发的数据对象的回调函数,并触发该回调函数,对数据的变化做出响应。

<script>
function Observer(data, events) {
    this.data = data;
    // 存放监听事件的回调
    this.events = events || {};
    this.walk(data, this.events);
}
// 遍历对象的各个属性,为其添加setter和getter
Observer.prototype.walk = function(data, events) {
    for(var key in data) {
        if(data.hasOwnProperty(key)){
            if(typeof(data[key]) == 'object'){
                new Observer(data[key], events)
            };
            this.convert(key, data[key], events);
        }
    }
}
Observer.prototype.convert = function(key, val, events) {
    var self = this;
    Object.defineProperty(this.data, key, {
        enumerable: true,
        configurable: true,
        get: function() {
            console.log('你访问了' + key);
            return val;
        },
        set: function(newVal) {
            console.log('你设置了', key, ',新的值为', newVal);
            if (newVal !== val) {
                val = newVal;
                // 触发当前key事件
                self.$emit(key, newVal); 
            }
            // 如果这个newVal是obj,继续递归调用new Observer
            if (typeof newVal === "object") { 
                return new Observer(newVal, events);
            }
        }
    })
}
// 将所监听事件及其回调函数添加到events对象
Observer.prototype.$watch = function(key, listener) {
    if(!this.events[key]){
        this.events[key] = [];
    };
    this.events[key].push(listener);
}
// 触发事件,并调用events里的相应事件的回调函数
Observer.prototype.$emit = function() {
    var key = [].shift.call(arguments);
    var data = [].slice.call(arguments);
    if(!this.events[key] || this.events[key].length < 1) return;
    this.events[key].forEach(function(listener){
        listener(data || {})
    })
}

let data={
    name: "yjm",
    address: "成都"
};

let app =new Observer(data);

app.$watch('name', function(name){
    console.log(`你的名字变了,现在是${name}`);
});
app.$watch('address', function(address){
    console.log(`你的地址改变了,现在是${address}`);
});
app.data.name = 'jmy';
</script>

相较于动态数据绑定1,实现传递回调函数主要是添加了一个事件对象events,将被监听的对象及其回调函数保存到events,在事件对象被触发的时候,调用events里保存的相应的回调函数。实现效果如下:
image

Vue2+Echarts+SpringBoot+Websocket+Scheduled实现大屏图表数据实时展示 阅读详情

相关推荐

Vue实现动态响应数据变化

本篇文章主要介绍了Vue 动态响应数据变化,通过绑定数据即可以实时改变视图显示,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

vue中动态改变对象或是数组数据,页面能够实时刷新数据

vue中动态改变对象或是数组数据,保证页面也是跟着随时改变的,现有三种方法实现: 1、改变引用 data:{ obj:{ name:'gou', age:18 } }, 直接更换变量引用 obj = { name:'gou', age:18, address:'beijin' } 2、 数组使用数组函数 pop、push、...

qq_34691738的博客 2万+

Hand-Eye 标定误差分析:从理论到 C++ 实现

本文深入探讨了机器人手眼标定中的核心环节——误差分析。文章从AX=XB方程的理论残差出发,详细解析了旋转与平移误差的数学定义与物理意义,并提供了一个工业级的C++实现代码,用于计算重投影误差。通过误差分析,工程师可以量化标定精度,诊断问题根源,从而确保视觉引导机器人系统在实际应用中的可靠性与精确性。

c7d8e的博客 695

vue2 对象中遍历对象 并动态展示数据

需要for循环进行遍历

qq_53439433的博客 1664

更多 LSTM 变种——应用于 CMAPSS 数据集

本文并模型介绍,只是把一些比较火的技术,像双向注意力机制,自注意力机制这样的比较火的内容,简单的和LSTM堆叠,结果发现效果都不如最基础的,这里作者将本人代码及实现结果,进行展示,给各位想更改LSTM的朋友一些。

2301_77491330的博客 1765

【晶振专题】晶振学习笔记——ST AN2867应用手册 2

通过学习AN2867设计指南,我们知道皮尔斯晶振的基本知识。也了解了晶振的负载电容计算方法、安全因子测试方法和反馈电阻的作用。

一点硬件 1364

vue实现接口中得数据有变化就要实时得请求获取到最新数据

vue实现接口中得数据有变化就要实时得请求获取到最新数据

学习交流 4897

基于深度学习YOLOv8的商品识别系统(深度学习 + UI界面 + 训练数据集 + Python代码)

如果使用自定义数据集,可以通过图像标注工具如LabelImg来标注每个商品的类别和边界框,并保存为YOLO格式的文本文件。bash复制编辑/dataset/images/train/val/labels/train/val这样,我们就准备好了数据集,可以开始训练YOLOv8模型。本文介绍了如何使用YOLOv8构建一个商品识别系统,包括从数据准备到模型训练,再到UI界面的开发。通过深度学习技术,尤其是YOLOv8的高效目标检测能力,我们能够快速实现商品识别并集成到实际应用中。

YOLO 302

Vue动态绑定技术详解

Vue动态绑定是Vue.js的一项强大功能,它使我们能够轻松地将数据绑定到DOM元素上,并实现实时更新。在实际开发中,我们可以使用Vue动态绑定来实现文本内容的动态修改、样式的动态绑定、属性的动态绑定、事件的动态绑定和列表的动态绑定等功能。另外,Vue动态绑定还具有良好的可维护性和可扩展性,因为它使用了Vue.js的响应式系统,使得我们能够轻松地管理数据和DOM元素之间的依赖关系。当我们将数据绑定到DOM元素上时,Vue.js会创建一个响应式的依赖关系,这个依赖关系会跟踪数据的变化并更新DOM元素。

qq_28245087的博客 2099

基于Django+Vue3的智能目标检测系统设计与实现,Vue3前台系统+Django后台管理系统开发,Web前后端分离,YOLOv8 Web目标检测,实现图片、视频和摄像头检测等功能,全网独发

目标检测是计算机视觉中的重要任务,广泛应用于安防监控、自动驾驶、智能家居等领域。YOLO系列模型由于其高效的检测速度和较高的准确率,成为目标检测任务的首选算法之一。本项目结合 YOLOv8 与 Django + Vue3,构建一个Vue3前台系统+Django后台管理系统开发,便于用户进行目标检测的操作和展示,实现对图片、视频实时目标检测,不仅可以用于大论文的工作量展示,还可以作为毕业设计。支持更换自己模型、图片检测、实时视频检测、置信度调节和IoU参数调节。同时支持目标检测、实例分割、关键点检测等任务

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 5434

Python爬虫实战:基于最新技术爬取国家企业信用信息公示系统数据

本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的国家企业信用信息公示系统爬虫。我们将从爬虫基础知识讲起,逐步深入到反爬机制应对、数据解析与存储等高级话题,最终实现一个完整的爬虫系统。文章包含大量实战代码示例,适合中高级Python开发者学习参考。网络爬虫(Web Crawler)是一种自动获取网页内容的程序,广泛应用于搜索引擎、数据分析和商业情报收集等领域。通用爬虫:如搜索引擎爬虫,广泛抓取互联网公开信息聚焦爬虫:针对特定领域或网站的数据采集增量式爬虫:只抓取更新内容,减少资源消耗。

2201_76125261的博客 2408

vue+Echarts动态数据已经赋值,但是无法渲染页面的问题

vue+Echarts动态数据已经赋值,但是无法渲染页面的问题 最近用vue+Echarts想做一个饼状统计图,但是数据明明已经绑定完毕,但是页面渲染一直没有效果,最终才发现问题所在,自己还是个新手,主要对vue还不是很熟悉。废话不说,接下来看我的代码: 正常的给个div的大小 &lt;div&gt; &lt;div id="echartss" :style="{width: '100%...

weixin_43481793的博客 6万+

【面试系列】数据分析师高频面试题及详细解答

本文为数据分析师岗位提供了详尽的面试题库和解答,涵盖初级、中级和高级三个层次。初级面试题涉及基本的数据处理和统计分析知识,如SQL查询、数据清理和基础统计概念。中级面试题则重点考察数据可视化、复杂查询和数据建模等技能。高级面试题则深入探讨高级统计方法、大数据处理和高级分析工具的使用。通过这些问题和解答,候选人可以全面了解数据分析师岗位所需的技能,帮助其更好地准备面试。常考知识点总结部分则系统归纳了数据分析师岗位的关键技能领域。

在路上的专栏 5228

vue动态数据绑定1--如何监听一个对象的变化

之前经常使用 Vue,后来不满足于仅仅使用它,我想了解其内部实现原理,所以就尝试学习其源码,获益匪浅。 - 动态数据绑定就是 Vue 最为基础,最为有用的一个功能。给定任意一个对象,如何监听其属性的读取与变化?也就是说,如何知道程序访问了对象的哪个属性,又改变了哪个属性? 举个例子。let app1 = new Observer({ name: 'yyy', age: 20 });let

林雨静 2771

RK3588开发笔记-mipi csi接口imx415摄像头调试记录

摘要:本文详细介绍了RK3588开发板适配SONY IMX415 MIPI CSI摄像头的调试过程。从硬件环境准备(包括RK3588核心板、IMX415模块连接及测试工具)、软件环境配置(Linux 5.10内核、驱动状态确认),到设备树关键配置(MIPI链路、GPIO引脚、电源域等)都进行了详细说明。调试过程中通过dmesg日志、media-ctl拓扑分析等工具验证了摄像头驱动加载和图像采集功能。最终实现了800万像素高清图像采集,总结了硬件连接验证、信号完整性优化等关键经验,为类似MIPI摄像头调试提供

flypig has a dream! 882

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Vue绑定动态数据

Vue绑定动态数据指的是将数据与页面元素进行关联,当数据发生改变时,页面元素会自动更新以反映最新的数据状态。Vue提供了多种方式来实现数据绑定,包括插值表达式、绑定属性、计算属性等。

BIBOR的博客 632

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

vue 动态数据绑定

动态数据绑定(一) 我的github iSAM2016 实现的步骤: 1.监听对象属性的读取与变化 Object.defineProperty() 方法会直接在对象上定义一个新的的属性,或者已经存在的属性 并且返回这个属性 语法是 Object.defineProperty(obj, prop, descript) obj: 目标对象 prop: 需要定义或修改的属性的名字 desc...

djj1220的博客 298

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【Vue2】v-if 绑定的数组或对象属性变化不响应问题解决详解

具体内容与双向绑定、$set()方法相关。整体内容过长,如果想参考最终解决,直接跳到总结即可;如果想要看一下实际情况,可以耐心浏览。

NineWaited的博客 5740

IFE Vue动态数据绑定

终于完成了Vue动态数据绑定这个任务,发现自己连渣都称不上,沫沫而已。。 提交地址:https://github.com/touming123/IFE-Baidu/tree/master/vue1.给定任意一个对象,如何监听其属性的读取与变化ES中有两种属性:数据属性和访问器属性 数据属性:configurable,enumerable,writabel,value 访问器属性:(包含一对ge

橙煦媛的博客 579

Vue的学习 —— <vue响应式基础>

Vue.js 以其高效的数据绑定和视图更新机制广受开发者喜爱。这一特性主要依赖于其独特的响应式系统设计,它能够实时监测数据变化并自动驱动相应的视图更新。简单来说,就是当数据发生变化时,依赖该数据的视图会自动进行更新。这种“响应”是通过在初始化阶段对数据对象属性进行深度观测和转换来实现的。在第二章中,我们使用Vite创建了一个Vue项目,并且注意到目录结构中包含了一些扩展名为.vue的文件。这些.vue文件实际上是用来定义Vue的单文件组件。在Vue中,单文件组件是一种特殊的文件格式,用于构建用户界面。

2301_78038072的博客 2937

AntV X6进阶技巧:用Vue组件实现动态数据绑定的5种姿势

本文深入探讨AntV X6与Vue深度集成的5种动态数据绑定高阶实践,包括基础数据绑定、Vuex状态管理、自定义事件通信、Teleport高性能渲染及混合渲染优化。通过具体代码示例和性能对比,帮助开发者掌握在复杂场景下实现高效数据绑定的技巧,提升图形应用的交互体验和渲染性能。

aa123的博客 502

vue下拉框动态数据绑定_vue开端 -- 做个工匠 - 1 数据绑定 以及 指令

嗨朋友!感谢光临我的博客 还没上岸的我 还在努力之中,本文中理解有错的时候还请您指点 本人也很喜欢爬虫 欢迎来到本人的公众号 一起交流 公众号:Linux下撸python 能得指点是晚辈荣幸絮叨一下简单介绍安装方法scriptnpm下载创建一个实例挂载点el存放数据data函数methods第一个hello vue指令v-xxv-htmlv-textv-pre填充原始信息v-bind 动态数据绑...

weixin_33800724的博客 8319

⑦ Vue的动态数据计算

我自己很笨,学习编程也是一点一点啃,总是把在别人看起来很简单的一个问题,自己都要反复琢磨好多遍,特别是有时候啃官方文档的时候,出现一些比较绕口的词,我怎么也不能理解,所以我就会不停的反问自己,你真的理解这个词吗?之后就会琢磨好久,用自己能理解的语言写出来,并记录下来! 如果,我分享的对您有帮助,那么我们一起进步,点赞随缘,收藏随心! 什么是动态数据? 发挥一下阅读理解能力,动态数据应该指的就是不断变化的数据,非固定一成不变的数据! 常见的几种场景: 商城种常见的购物车数据就是不断变化的 购买商品支付的.

CRMEB小程序商城的博客 3692

Echarts动态数据绑定:如何避免legend和series的name值不同步问题

本文深入解析了Echarts动态数据绑定中legend与series的name值不同步问题的根源,并提供了三种核心解决策略:基于数据源动态生成配置、利用dataset组件自动映射,以及在Vue/React框架中利用响应式特性。重点强调了通过协同更新legend.data与series.name,或借助dataset的自动推断功能,来确保图例与数据系列在动态更新时始终保持同步,从而避免常见的控制台警告和显示异常。

9q8w7e6r5的博客 1067

数据的响应式:实现动态数据驱动的技巧

本文将介绍数据响应式的概念、意义以及如何实现,帮助您了解如何利用数据响应式实现动态数据驱动,提升应用的灵活性和用户体验。🎉 数据响应式是实现动态数据驱动的重要手段。通过了解数据响应式的概念、意义以及如何实现,我们可以更好地利用数据响应式提升应用的灵活性和用户体验。

你若盛开,清风自来 1174
上一篇: css盒模型
下一篇: vue动态数据绑定3--深层次数据变化逐层往上传播
林雨静
博客等级 码龄10年 11粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值