美文网首页
Vue的相关知识点

Vue的相关知识点

作者: 我向你奔 | 来源:发表于2018-03-12 21:05 被阅读78次

    双向数据绑定原理

    DOM是数据的一种自然映射



    这里的ViewModel是一个vue实例,如果没有ViewModel我们的DOM跟数据怎么交互呢?



    Vue是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter。在数据变动时发布消息给订阅者,发出相应的监听回调,达到监听数据变动的目的。

    Object.defineProperty ():

    语法: Object.defineProperty(obj, prop, descriptor)
    参数:
    obj: 操作对象
    prop: 需要操作的属性名称
    descriptor: 属性具有的特性
    返回值: 传入的对象, 即第一个参数obj
    针对特性描述存在两种形式: 数据描述和存取器描述
    

    Object.defineProperty 是ES5中一个无法shim的特性,这也就是为什么Vue不支持IE8以及更低版本浏览器的原因。
    shim特性:指把一个库引入一个旧的浏览器, 然后用旧的API, 实现一些新的API的功能

    现在有一份数据a.b,在一个vue对象实例化过程中,会给a.b这份数据通过es5 Object.defineproperty属性添加了一个getter和setter,同时vuejs会对模块做编译,解析生成一个指令对象,在这里就是一个v-text指令,每一个指令对象都会关联一个watcher,但我们对指令对应的表达式a.b求值的时候就会触发它的getter,这里我们就会把依赖生成到watcher里。当我们再次改变a.b的值时,就会触发它的setter,会通知到对应关联的watcher里,watcher就会再次对a.b求值,计算对比新旧值,当发现值改变了,watcher就会通知到指令,调用指令的update方法,由于指令是对DOM的封装,所以它就会调用原生DOM的方法去更新视图,这样我们就完成了数据改变到视图更新的自动过程。

    组件化

    组件化的目的是拓展HTML元素,封装可重用的代码


    组件设计原则:
    页面上每个独立的可视/可交互区域视为一个组件;
    每个组件对应一个工程目录,组件所需要的各种资源在这个目录下就近维护;
    页面不过是组件的容器,组件可以嵌套自由组合形成完整的页面;

    jQuery与Vue的区别

    1. jQuery首先要获取到dom对象,然后对dom对象进行进行值的修改等操作。
    2. Vue是首先把值和js对象进行绑定,然后修改js对象的值,Vue框架就会自动把dom的值就行更新。
    3. 可以简单的理解为Vue帮我们做了dom操作,我们以后用Vue就需要修改对象的值和做好元素和对象的绑定,Vue这个框架就会自动帮我们做好dom的相关操作。
    4. 这种dom元素跟随JS对象值的变化而变化叫做单向数据绑定,如果JS对象的值也跟随着dom元素的值的变化而变化就叫做双向数据绑定。

    在vue中获取dom

    mounted(){ //这里必须是 mouted 钩子
      this.title = document.querySelector('#footer-box-title');
      this.title.style.color = "#ff0000";
    }
    

    要在mounted中使用,因为只有在执行 mounted 的时候,vue已经渲染了dom节点,这个时候是可以获取dom节点的,也可以使用ref属性获取

    <button ref="btn">获取ref</button>
    this.$ref.btn.style.backgroundColor="#ff0000"
    

    相关文章

      网友评论

          本文标题:Vue的相关知识点

          本文链接:https://www.haomeiwen.com/subject/ialnfftx.html