当前位置: 首页 > news >正文

Vue及双向绑定

Vue的特点

1 ,易用(使用成本低)
2 ,灵活(生态系统完善,试用于任何规模的项目)
3 ,高效(体积小,优化好,性能好)

Vue是一个MVVM的js 框架,但是,Vue 的核心库只关注视图层,开发者关注的只是m-v的映射关系,也就是说我们就是关心的映射关系。

注意的是: MVC、MVP、MVVM

1 MVC的之间关系:通信都是单向的。
View 传送指令到Controller,
Controller完成业务逻辑之后要求Model改变状态
Model 将新的数据发送到View,用户得到反馈
2 MVP之间的关系、:MVP模式将Controller改名为Presenter,同时改变了通信方向。
各部分之间的通信,都是双向的
View与Model不发生关系,通过Presenter传递
VIew非常薄,不会部署任何业务逻辑,称为“被动式图”(Passive View),既没有任何主动性,而Presenter非常厚,所有的业务逻辑都部署在这里
3 MVVM 模式将presenter改名为ViewModel,基本上与MVP模式完全一致,唯一区别是,它采用的是双向绑定(data-binding),View的变动,自动反应在ViewModel,反之亦然。Angular和Ember都采用这种模式

{{msg}}
// 创建一个Vue的实例
// 声明一条数据,然后用页数的模板语法将其渲染到界面中 (声明式渲染)
// el  data methods是固定写法
var vm=new Vue({
  el:'#app',//获取元素 处
  data:{//数据 存放处
    msg:'hello word'
  },
  methods:{//方法 存放处
  }
})



**vue 中按照MVVM的架构去进行实现的
MVVM
m: model 模型
v: view 视图
vm: ViewModel 视图模型**

重点:

当model层的数据发生改变,为什么Vm就可以知道数据发生了变化
也就是说vue的双向数据绑定原理是什么:
1 vue在创建VM的时候,会将数据配置到实例中。然后通过 Object.defineProperty 方法,
    为数据动态的添加getter和setter方法
      **(Object.defineProperty(obj, prop, descriptor)**
      obj:需要定义属性的对象
      prop:需要定义的属性
      descriptor:属性的描述描述符
      返回值:返回此对象)

2 当获取数据的时候,会触发对应的getter方法,当设置数据的时候,触发对应的setter方法
3 然后当setter方法触完成的时候,内部会进一步的触发 watcher (观察者),,当数据改变了,视图则更新操作完毕。



// 创建Vue实例
// 先在外部创建一个data
// let data1={msg:'nihao'}
// new Vue({
//   el:'#app',
//   data:data1
// })
// console.log(data1)//Object

var obj = {}
// 设置一个中间变量承接内容
let middel=100
Object.defineProperty(obj, 'prop', {
  get() {
    console.log('打印getter的方法')
    return middel;
  },
  set(val) {
    console.log('打印setter的方法',val)
    middel=val
  }
})
// 在这里打印的顺序是看自己是获取还是设置

console.log(obj.prop)//获取对象的属性的时候,会调用自身的get方法

obj.prop=11 //设置对象的属性的时候,会调用自身的set方法
// console.log(obj.prop)

相关文章:

  • 跟我一起ggplot2(1)
  • 解析v-model指令,对于刚接触的比较好理解
  • App架构设计经验谈:服务端接口的设计
  • Vue v-for的操作
  • 如何查找UDID
  • v-if 和v-show的相同和区别
  • 字典树(Trie tree)
  • Vue中组件的分类
  • 计算机是怎么跑起来的(1)
  • Android学习笔记(二)
  • vue-生命周期
  • Flex/AS3/flash player支持屏蔽右键菜单,自定义菜单,并设置相应的菜单事件(示例,图解)...
  • vue-cli脚手架 搭建项目
  • 玩转无线电 -- 温哥华天车 RFID 票务系统
  • 前端常见的linux指令
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • bearychat的java client
  • canvas 五子棋游戏
  • CSS盒模型深入
  • express.js的介绍及使用
  • HTTP中GET与POST的区别 99%的错误认识
  • input实现文字超出省略号功能
  • isset在php5.6-和php7.0+的一些差异
  • java多线程
  • laravel5.5 视图共享数据
  • node-glob通配符
  • overflow: hidden IE7无效
  • PHP 小技巧
  • SOFAMosn配置模型
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • use Google search engine
  • Vue2 SSR 的优化之旅
  • 诡异!React stopPropagation失灵
  • 基于axios的vue插件,让http请求更简单
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 树莓派 - 使用须知
  • 字符串匹配基础上
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • PostgreSQL之连接数修改
  • 大数据全解:定义、价值及挑战
  • ​flutter 代码混淆
  • # 数论-逆元
  • #Linux(make工具和makefile文件以及makefile语法)
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (floyd+补集) poj 3275
  • (Git) gitignore基础使用
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (一)认识微服务
  • (转)setTimeout 和 setInterval 的区别
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息