在vue中实现数据双向绑定的核心在于v-model
示例:

 <input type="text" name=" " v-model="userName">

当输入框中的内容发生变化时,如用户在视图view输入hello world 此时我们在model层即用js处理逻辑代码的地方就会获取用户输入的值。
反之在model层给与userName一个值时,view层的值也会进行同步,简而言之双向指的是view层和model层 ,数据绑定即model上的数据,在view和model是同步绑定关系的。
用原生js模拟数据双向绑定
用js监听数据的变化并将变化的数据同步到页面,为了实现这个功能我们需要用到js的一个方法
Object.defineProperty
定义:Object.defineProperty()方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
语法:Object.defineProperty(obj,prop,descriptor)

参数 说明
obj 目标对象
prop 需要定义的属性或方法的名字
descriptor 目标属性所拥有的特性

descriptor有以下取值
value
属性的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined。

 var a= {};Object.defineProperty(a,"b",{value:123})console.log(a.b);//打印123

writable
writable 值为 true 时,属性的值(value)才能被赋值运算符改变。如果为false,属性的值就不能被重写,只能为只读了。默认为 false。

 var a = {};Object.defineProperty(o, "b", {value : 123,writable : false});console.log(a.b); // 打印 37a.b = 25; // 没有错误抛出(在严格模式下会抛出,即使之前已经有相同的值)console.log(o.a); // 打印 37, 赋值不起作用。

configurable
configurable 值为 true 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。
一旦为false,就不能再设置它的(value,writable,configurable)默认为 false。

 var a= {}Object.defineProperty(a,"b",{configurable:false})Object.defineProperty(a,"b",{configurable:true})//error: Uncaught TypeError: Cannot redefine property: b

enumerable
enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。默认为 false。

 var a= {};Object.defineProperty(a,"b",{value:3445,enumerable:true//注意是false时,打印输出[]})console.log(Object.keys(a));// 打印["b"]

set和get
在 descriptor 中不能同时设置访问器(get 和 set)和 wriable 或 value,否则会出错,也就是说想用
get 和 set,就不能用 wriable 或 value 中的任何一个。

 var a= {}Object.defineProperty(a,"b",{set:function(newValue){console.log("要赋值给我,我的新值是"+newValue)},get:function(){console.log("取我的值")return 2 //返回2}})a.b =1 //打印出 你要赋值给我,我的新值是1console.log(a.b) //打印 你取我的值   2

实例效果


实现代码

通过创建一个obj对象,然后设置一个访问器属性hello,然后监听文本框的一个keyup事件,调用回调函数,重新设置obj.hello属性,其实际上是去调用内部属性set方法,在set方法更改文本框的value和p标签的innerHTML,从而达到数据的绑定。

 <body><input type="text" placeholder="你的名字" id="input"/><h1>你好,<span id="a"></span></h1><script>var obj = {};Object.defineProperty(obj,'hello',{set:function(val){document.getElementById('input').value = val;document.getElementById('a').innerHTML = val;}});document.addEventListener('keyup',function(e){obj.hello = e.target.value;})</script></body>

Vue之数据的双向绑定相关推荐

  1. 【Vue】—数据的双向绑定v-model

    [Vue]-数据的双向绑定v-model

  2. vue单向数据流与双向绑定两者区别

    1.Vue 在不同组件间强制使用单向数据流,父组件可以向子组件传递数据,但是子组件不能直接修改父组件的状态. 2.数据的双向绑定 主要由MVVM框架实现,主要由三部分组成View.ViewModel和 ...

  3. vue3数据的双向绑定

    vue3关于数据的双向绑定 一.script setup 现在,没必要把数据写到data里面,或者是写一个setup函数,再进行return出去. import进来的组件,可以直接在页面中使用,不再需 ...

  4. React入门---事件与数据的双向绑定-9

    上一节中,我们是从父组件给子组件传送数据,要实现事件与数据的双向绑定,我们来看如何从子组件向父组件传送数据; 接触之前,我们看一些里面函数绑定的知识: 例:通过点击事件改变state的age属性值: ...

  5. AngularJS数据的双向绑定

    数据的双向绑定 Angular实现了双向绑定机制.所谓的双向绑定,无非是从界面的操作能实时反映到数据,数据的变更能实时展现到界面. 一个最简单的示例就是这样: <div ng-controlle ...

  6. 【Vue2 组件间数据的双向绑定】

    组件间数据的双向绑定 一.通过自定义事件 二.通过v-model 三.通过.sync修饰符 四.provide和inject 代码中的p-8,mt-8等,都是自己写的工具类,复制代码的同学,可以自行删 ...

  7. Vue中实现父子组件的数据的双向绑定(vue.sync的用法)

    项目场景: 前两天日常开发时,遇到需要父子组件双向绑定的问题,出现了一些BUG,但是考虑到组件的可维护性,vue中是不允许子组件改变父组件传的props值的 问题描述: 问题场景就是子组件传递数据给父 ...

  8. 【进阶玩法】Angular用emit()实现类似Vue.js的v-model双向绑定[(ngModel)]功能

    app.component.html <app-sizer [(ngModel)]="fontSizePx"></app-sizer> <p [sty ...

  9. vue生命周期及双向绑定

    这篇文章不是原创,看了其他人的分析贴,记录下自己学到的.本篇主要记录一下vue内部流程,以及双向绑定原理.Vue的可爱之处在于他的双向绑定及Virtual DOM的思想. vue内部流程 如图所示,实 ...

最新文章

  1. 解决每次git pull需要不用输入用户名信息
  2. tp5实现Redis的简单使用
  3. Doxygen使用介绍
  4. 巧用iptables搞定SYN洪水攻击!
  5. 米斯特白帽培训讲义 挖掘篇
  6. python编程手机模拟点击_python模拟点击玩游戏的实例讲解
  7. ASP.net C# EVal关于前端绑定
  8. C++中析构函数的作用,
  9. matlab中的全局参量,matlab参数传递及全局变量 | 学步园
  10. STM32F0免费版keil下载激活方式
  11. 大数据分析流程步骤都有哪些
  12. 呼吸运动减肥法-可以加快新陈代谢
  13. bada开发——简单介绍
  14. vue音乐播放器笔记
  15. SpringMVC+LayUI 交通事故管理系统
  16. TestCenter测试管理工具问题详解(3)
  17. 桌越科技关于程序员和软件开发
  18. centos挂载u盘只读_centos挂载u盘只读_针对优盘在linux下文件只读的解决方案
  19. java map字典序_java中对map的字典序排序
  20. Java实现 蓝桥杯VIP 算法提高 3000米排名预测

热门文章

  1. 安装jenkins-中文版-国内源-超简单
  2. [bash]基础shell命令总结
  3. Koltin-用法总结
  4. nginx的配置与安装
  5. 计算机期刊在线阅读,计算机学术期刊会议排名.doc
  6. android配置vlc_VLC-Android使用总结
  7. 人工智能--贪婪算法(启发式搜索)
  8. 手机硬件自动老化测试软件,手机越用越慢?鲁大师老化实验室告诉你真相
  9. 华中科技大学计算机中德班,华中科技大学中德班介绍
  10. 上海交大计算机技术管云峰,上海交通大学无线通信研究所