vue的双向绑定原理_vue中数据双向绑定的原理

vue的双向绑定原理_vue中数据双向绑定的原理简析mvvm框架 目前angular,reat和vue都是mvvm类型的框架以vue为例 这里的vm 就是vue框架,它相当于中间枢纽的作用,连接着model 和view.当前台显示的view发生变化了,它会实时反应到viewModel上,如果有需要,viewModel 会通过ajax等方法将改变的数据传递给后台model 同时从后台model获取过来的数据,通过vm将…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

  1. 简析mvvm框架

目前angular,reat和vue都是mvvm类型的框架

以vue为例

vue的双向绑定原理_vue中数据双向绑定的原理

 

这里的vm 就是vue框架,它相当于中间枢纽的作用,连接着model 和view.

  • 当前台显示的view发生变化了,它会实时反应到viewModel上,如果有需要,viewModel 会通过ajax等方法将改变的数据 传递给后台model
  • 同时从后台model获取过来的数据,通过vm将值响应到前台UI上

 

  • 双向绑定原理

vue的双向绑定原理_vue中数据双向绑定的原理

vm的核心是view 和 data 

  • 当data 有变化的时候它通过Object.defineProperty()方法中的set方法进行监控,并调用在此之前已经定义好data 和view的关系了的回调函数,来通知view进行数据的改变
  • 而view 发生改变则是通过底层的input 事件来进行data的响应更改

vue是通Object.defineProperty()实现数据劫持的

Object.defineProperty( )是用来做什么的?它可以来控制一个对象属性的一些特有操作,比如读写权、是否可以枚举,这里我们主要先来研究下它对应的两个描述属性get和set

varBook= {}

       varname= '';

       Object.defineProperty(Book, 'name', {

           set:function(value) {

                name= value;

                console.log('你取了一个书名叫做'+ value);

           },

           get:function() {

                return'《'+ name+ '》'

           }

       })



       console.log(Book)

       Book.name= 'vue权威指南'; // 你取了一个书名叫做vue权威指南

        console.log(Book.name); // 《vue权威指南》

       // get 是在读取那么属性的时候触发的

       // set 是在设置属性值的时候触发的

 

实现方法: 观察者模式

vue的双向绑定原理_vue中数据双向绑定的原理

Observer(Objec.defineProperty中的set)监听data的变化,当data有变化的时候通知观察者列表Dep(里面有与data变化对应的update函数),watcher负责向观察者列表里添加(订阅)对应的更新函数,Dep里的更新函数执行完了之后将最新的值更新到view上。

具体的代码实现可参考:https://www.cnblogs.com/libin-1/p/6893712.html

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180677.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java VM option

    -Xms256m-Xmx256m-XX:MaxNewSize=256m-XX:MaxPermSize=256m

    2022年4月9日
    55
  • layoutSubviews触发问题

    layoutSubviews触发问题layoutSubviews在以下情况下会被调用: 1、init初始化不会触发layoutSubviews 2、addSubview会触发layoutSubviews 3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化 4、滚动一个UIScrollView会触发layoutSubviews 5、旋转Screen会触发父UIView上的layo…

    2022年7月25日
    15
  • 石器时代服务器架设教程_石器时代gm命令

    石器时代服务器架设教程_石器时代gm命令本文只作学习研究之用,任何人不得非法使用。Linux系统架设石器私服概述首要条件,安装Linux版系统,建议CentOS4或者5工具:SSHvncforLinuxandwinxamppforLinux主机在眼前的就不说了,首先说的是如果你租了服务器,机房给你装好系统你自己还需要一些工具再进Linux一般Linux系统用户名默认为root服务商会给你一个初始密码ssh安装在自己w…

    2022年9月26日
    4
  • 制作zencart模板的几个步骤

    制作zencart模板的几个步骤很多做外贸站的朋友都在为自己的网店模板而头疼不已,本来踌躇满志的要好好做网站,但是当你用网店程序的时候,发现zencart程序里面默认的模板都不怎么好看。于是乎,四处寻找,找了这个想要那个,结果不是不能用就是功能不全。而且最大的威胁就是不安全,万一有个什么其他的代码嵌在里面,你也发现不了。这对于做外贸的你来说是得不偿失的,那么,你是否想要自己做一个你喜欢的模板呢?是不是苦于没有方法呢?易搜今天就来…

    2022年7月27日
    4
  • 解决docker下载镜像速度过慢_docker拉取镜像失败

    解决docker下载镜像速度过慢_docker拉取镜像失败前言上一篇讲到pull镜像,但是pull镜像的时候下拉的速度实在感人,有什么解决办法吗?我们只需将docker镜像源修改为国内的将docker镜像源修改为国内的:在/etc/docker/d

    2022年7月31日
    9
  • 在html中使用fontIcon 的图标

    在html中使用fontIcon 的图标听说fontIcon显现图形比img要高。 然后它是以矢量图的相似呈现,放大不会失真。 在今天开发中发现,公司有人使用了这项技术。。所以也就花时间学习了一下。。在学过程中看了几篇文章之后完成的。。这里也推荐下:1http://www.chinaui.com/Knowledge/20120907/14021209040007.shtml(里面有demo,和更重要的图

    2025年8月22日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号