js双向绑定实例是什么,js如何实现双向绑定

本文目录一览:

js中的双向数据绑定是什么意思

双向数据绑定指的就是,绑定对象属性的改变到用户界面的变化的能力,反之亦然。换种说法,如果我们有一个user对象和一个name属性,一旦我们赋了一个新值给user.name,在UI上就会显示新的姓名了。同样地,如果UI包含了一个输入用户姓名的输入框,输入一个新值就应该会使user对象的name属性做出相应的改变。

详细的解释和例子可以看下这篇文章,,希望对你有帮助

js设计模式-观察者模式来模拟vue的双向数据绑定

vue的双向数据绑定大家应该很熟悉了,当一方的值发生改变时,另一方绑定的值也会随之变化,用起来是挺嗨的。

但是在原生中我们怎么使用这种机制呢?

最近有个需求是通过对接websocket获取后台服务器实时变化的值,推送给web端使用。

基于这个需求,我使用到了js中的设计模式-观察者模式。

那么,让我们来一起了解一下吧。

先来看看具体机制:

这里对象定义了四个属性,分别绑定四个函数。

1、订阅:订阅方通过传递回调函数,观察者模式把这个回调函数push到自身的订阅功能里,以此来得知谁订阅了,然后判断是否要推送。

2、退订:找到对应的回调函数,然后在自身的订阅功能里把当前函数删除掉

3、发布:循环所有的订阅方,当发布方进行发送的时候,把对应的数据推送给订阅方

4、发布订阅:定义一个对象,使其具备订阅并且发布的功能

流程是这样,说起来头头是道的,问题是怎么使用?

举个栗子:

我想定义一个对象,使其具备发布订阅功能,发布方数值改变的时候,订阅方得到平方值得变化

这里通过input框的change事件,模拟了数据的实时变更,然后把当前值进行发布,这边一发布,订阅方就能通过回调函数得到实时变化的值,然后得到值进行相应的操作。

效果:

这样就能简单实现数据变更推送功能了。

注:文件中引入的observer的js是最上面提到的观察者模式的那一套流程,tools的js大家可以不必在意,是我自己原生封装的$函数,用来获取dom元素的。

具体需求,大家还需要变通,稍作修改。

好了,以上就是js的观察者模式实现的双向数据绑定。

如有问题,请指出,接受批评。

实现双向数据绑定

MVVM框架主要包含3个部分: model 、 view 和 viewmodel 。

简单的来说,就是框架的控制器层(这里的控制器层是一个泛指,可以理解为控制view行为和联系model层的中间件)和UI展示层(view层)建立一个双向的数据通道。当这两层中的任何一方发生变化时,另一层将会自动作出相应的变化。

一般来说要实现这种双向数据绑定,在前端我目前了解的有三种形式:

目前angular,regular的实现都是基于脏检查。当发生某些特定的事情的时候,框架会调用相关的digest方法。内部逻辑就是遍历所有的 watcher ,对监控的属性做对比。如果值发生了变化,则执行相应的 handler 。

当系统进入脏检查阶段,遍历所有的 $watch 绑定的 watcher ,然后对比 watcher.get() 与 watcher.last ,如果不同则运行对应的 watcher.fn(newvalue, oldvalue) 。然后再进入下一个watcher的检查。

何时进行脏检查?

由于regularjs是基于脏检查,所以当不是由regularjs本身控制的操作(如事件、指令)引起的数据操作,可能需要你手动的去同步data与view的数据. $update方法即帮助将你的data同步到view层.

]( )元素来控制你的观察者数量。

使用ES7中的 Object.observe 方法对对象(或者其属性)进行监控观察,一旦其发生变化时,将会执行相应的handler。这是目前监控属性数据变更最完美的一种方法,语言(浏览器)原生支持,没有什么比这个更好了。唯一的遗憾就是目前支持广度还不行,有待全面推广。

vue.js和avalon.js实现数据双向绑定的原理就是属性访问器。

它使用了ES5中的定义标准属性的Object.defineProperty 方法。

Object.defineProperty 使用示例:

首先,vuejs在实例化的过程中,会对遍历传给实例化对象选项中的data 选项,遍历其所有属性并使用 Object.defineProperty 把这些属性全部转为 getter/setter。

同时每一个实例对象都有一个watcher实例对象,他会在模板编译的过程中,用getter去访问data的属性,watcher此时就会把用到的data属性记为依赖,这样就建立了视图与数据之间的联系。当之后我们渲染视图的数据依赖发生改变(即数据的setter被调用)的时候,watcher会对比前后两个的数值是否发生变化,然后确定是否通知视图进行重新渲染。这样就实现了所谓的双向数据绑定。

AngularJS的数据双向绑定是怎么实现的

它们将模板和数据合并起来加入到视图中去,如图表中所示。合并完成之后,从图中的流向可以看出,任何对数据模型或者相关内容的改变都不会自动反映到视图中去。而且用户对视图的任何改变也不会自动同步到数据模型中来。这意味着,开发者需要编写代码来保持视图与模板、模板与视图的同步,无疑增加了开发的工作量。

那么有没有可以自动实现这种双向机制的框架,有,请看:

下图:双向绑定

AngularJS的数据绑定是数据模型(model)与视图(view)组件的自动同步。Angular的实现方式允许你把应用中的模型看成单一数据源。而视图始终是数据模型的一种展现形式。当模型改变时,视图就能反映这种改变,反之亦然。

js实现数据双向绑定

我们主要通过ES5中的 Object.defineProperty 实现,主要是利用里面的 get 和 set 来实现数据双向绑定

以上没满足知识量的可查看详情 : 双向绑定原理详情

以上就是对ES5中Object.defineProperty实现双向数据绑定的理解

Vue.js入门教程(三)双向绑定和数据渲染

既然清楚了原理,那么,接下来进入正题——我知道了vue怎么安装,那么我怎么使用呢?

在告诉你基础用法之前,我还是要先告诉你一个情况。

可能要令你有点失望。vue主要是侧重于数据端的。他的目的就是渲染数据和在前端调整一下数据逻辑。

他不是像jquery那样让你用来做特技的。就算你要做特技。你也应该通过css3/canvas而不是dom。

所谓的双向绑定,你可以理解就是把view。(你还不清楚mvc的话,请看第一章)

和model绑定到一起。说白了,就是你js中的绑定值变了。你dom中的内容就跟着一块变了。

vue是通过解析{{文字..}}来生成内容的。后面绑定方法,输出内容的时候都会讲到。

列表输出使用 v-for,这些v开头加横杠的叫做命令

这些命令是可以自定义的。但是那都属于高级操作,我们不用它也完全足够支撑做一个大型项目了。

其实你回发现,这里无论是v-for或者是v-什么其他玩意

它都深刻的遵循了es6的语法。这里不就是一个典型的for in 循环吗。不过我们现在都用for of了。

你记住这个用法,它就长这样。

前后端分离开发的关键在于:后台只提供接口。

我们获得的数据多数情况下,仅仅是一个json,而mvvm的关键就再于解析数据在前端完成了。如果你了解jsp或者php你会了解,数据的解析在mvc中,

是由后端完成的,而html只负责显示。

所以,当你了解了数据绑定和渲染以后,你可以第一时间先把数据输出到页面了。

我们前端最厉害的地方不就是处理能看得见的东西吗?

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/304234.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2025-01-01 11:05
下一篇 2025-01-01 11:05

相关推荐

  • Python生成随机数的应用和实例

    本文将向您介绍如何使用Python生成50个60到100之间的随机数,并将列举使用随机数的几个实际应用场景。 一、生成随机数的代码示例 import random # 生成50个6…

    编程 2025-04-29
  • 如何实现图像粘贴到蒙版

    本文将从多个方面介绍图像粘贴到蒙版的实现方法。 一、创建蒙版 首先,在HTML中创建一个蒙版元素,用于接收要粘贴的图片。 <div id=”mask” style=”widt…

    编程 2025-04-29
  • Django ORM如何实现或的条件查询

    在我们使用Django进行数据库操作的时候,查询条件往往不止一个,一个好的查询语句需要考虑我们的查询要求以及业务场景。在实际工作中,我们经常需要使用或的条件进行查询,本文将详细介绍…

    编程 2025-04-29
  • Python一次性输入10个数如何实现?

    Python提供了多种方法进行输入,可以手动逐个输入,也可以一次性输入多个数。在需要输入大量数据时,一次性输入十个数就非常方便。下面我们从多个方面来讲解如何一次性输入10个数。 一…

    编程 2025-04-28
  • 如何在dolphinscheduler中运行chunjun任务实例

    本文将从多个方面对dolphinscheduler运行chunjun任务实例进行详细的阐述,包括准备工作、chunjun任务配置、运行结果等方面。 一、准备工作 在运行chunju…

    编程 2025-04-28
  • 如何实现van-picker点击遮罩不关闭

    van-picker是一个非常实用的Vue组件,但默认情况下,点击遮罩会自动关闭选择器。本文将介绍如何通过代码实现van-picker点击遮罩不关闭的功能。 一、通过覆盖遮罩实现 …

    编程 2025-04-27
  • 如何实现矩阵相乘等于E

    本文将介绍如何通过代码实现两个矩阵相乘等于单位矩阵E。 一、线性代数基础 要理解矩阵相乘等于E,需要先了解一些线性代数基础知识。 首先,矩阵的乘法是满足结合律的,即(A*B)*C=…

    编程 2025-04-27
  • Python存为JSON的方法及实例

    本文将从以下多个方面对Python存为JSON做详细的阐述。 一、JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅…

    编程 2025-04-27
  • 分析if prefixoverrides="and |or"的用法与实例

    if语句是编程语言中最为基础和常见的控制流语句,而prefixoverrides是if语句的一个重要属性。其中,prefixoverrides的常见取值为and和or。那么,这两者…

    编程 2025-04-27
  • Tanimoto系数用法介绍及实例

    本文将详细讲解Tanimoto系数的定义和使用方法,并提供相关实例代码以供参考。 一、Tanimoto系数概述 Tanimoto系数也称为Jaccard系数,是计算两个集合相似度的…

    编程 2025-04-27

发表回复

登录后才能评论