zoukankan      html  css  js  c++  java
  • VueJs

      在没有viewModel之前,比如我们通过ajax从后端获取数据,为了让视图改变,我们会手动触发dom的改变;例如,通过交互改变一些数据,为了让视图发生变化,任然需要手动触发dom的改变。手动改变dom不仅是一个繁琐的过程,而且还很容易出错。而我们用了viewModel后,就省去了手动改变dom的步骤。在viewjs里你只需要改变数据,view对指令进行一次dom的封装,当数据发生变化,就会通知指令修改对应的DOM,数据驱动DOM变化。

      vueJs会对model进行监听,当view视图发生变化的时候,vuejs会对通过DOM Listener监听这些变化,从而改变数据,这样就形成了数据双向绑定。

          那么到底vueJS是如何和做到这一点的呢?

        

     

       我们这里有一份数据a和b,在一个viewJS对象实例化的过程中,会通过ES5的object.propertydefine给数据a和b添加setter和getter,同时vuejs会对模板进行编译,解析生成一个指令对象,每一个指令对象都会关联一个watcher,当对指令表单进行求值的时候,就会触发了a和b的getter,就会把依赖收集到这个watcher里面,当我们再次改变a和b的值的时候,就会触发setter,会通知到对应关联的watcher,然后watcher会再次对a.b求值,计算对比旧值,当发现值发生改变了,watcher就会通知到指令,调用指令的update方法,由于指令是对dom的封装,dom就会调用原生的方法去更新视图。

      vuejs的另一个主要的核心思想是组件化。组件化的目的是扩展HTML元素,封装可重用代码。

      组件可以嵌套形成区域。

      在viewjs中每个组件对应一个viewModel。

      最终会生成一个view render树,它和我们的dom树是一 一对应的关系。

      组件所需要的各种资源在这个工程目录下就近维护,这个就近维护的原则其实就体现了前端工程化思想。每个开发者都可以清楚的知道自己所开发维护的功能单元。

      在vuejs中可以通过.vue文件把组件依赖的css样式、JavaScript、HTML模板都写在一个文件里。

  • 相关阅读:
    运算符重载
    简单函数template max
    const static extern
    python 关闭垃圾回收
    Easy and cheap cluster building on AWS backup
    [转] Maven更新父子模块的版本号, mvn versions:set
    [转] ansible批量执行命令展示
    HBase 批量删除表 disable_all drop_all
    自动添加 ssh key 到远程主机的脚本,应用sshpass和ssh-copy-id
    MongoDB ver 4 几个常用命令
  • 原文地址:https://www.cnblogs.com/aliwa/p/6367863.html
Copyright © 2011-2022 走看看