js实现双向绑定,和vue生命周期描述使用

535 阅读3分钟

vue基础 day1

说到vue,第一反应就是MVVM框架,那么什么是MVVM框架,和普通的框架有什么区别,

  • mvvm 是 model + view + viewmodel 框架,通过 viewmodel 连接数据模型model 和 view

  • Vue是以数据为驱动的,Vue自身将DOM和数据进行绑定,一旦创建绑定,DOM和数据将保持同步,每当数据发生变化,DOM会跟着变化

  • ViewModel是Vue的核心,它是Vue的一个实例。Vue实例时作用域某个HTML元素上的,这个HTML元素可以是body,也可以是某个id所指代的元素

  • DOM Listeners和Data Bindings是实现双向绑定的关键。DOM Listeners监听页面所有View层DOM元素的变化,当发生变化,Model层的数据随之变化;Data Bindings监听Model层的数据,当数据发生变化,View层的DOM元素随之变化

小结:简单说vue就是一个拥有ViewModel实例,这个实例链接数据模型和视图,以数据驱动,通过数据来显示视图层,而不是操作节点,双向绑定的中心是DOM Listeners和Data Bindings

JS实现双向绑定

<body>
    <div id="div1">
        <input type="text" id="txt">
        <p id="show"></p>
    </div>
</body>
<script type="text/javascript">
    //要双向绑定的数据对象
    var obj = {}
        //通过defineProperty,来监听obj对象中的txt属性变化
    Object.defineProperty(obj, 'txt1', {
        //txt1被读取时返回原来值
        get: function() {
            return obj
        },
        //当txt1被设置时,把这个值赋给input,和p标签
        set: function(newValue) {
            document.getElementById('txt').value = newValue
            document.getElementById('show').innerHTML = newValue
        }
    })
    //当输入框有输入事件,把输入的这个值传赋给数据对象,然后数据对象触发,再赋给绑定的框
    document.addEventListener('keyup', function(e) {
        obj.txt1 = e.target.value
    })
</script>

vue的生命周期

  • 首先总共分为8个阶段创建前/后,载入前/后,更新前/后,销毁前/后,

  • beforeCreate(创建前) 在数据观测和初始化事件还未开始

  • created(创建后) 完成数据观测,属性和方法的运算,初始化事件,$el属性还没有显示出来

  • beforeMount(载入前) 在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。注意此时还没有挂载html到页面上。

  • mounted(载入后) 在el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html页面中。此过程中进行ajax交互。

  • beforeUpdate(更新前) 在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。

  • updated(更新后) 在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用

  • beforeDestroy(销毁前) 在实例销毁之前调用。实例仍然完全可用。

  • destroyed(销毁后) 在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。

小结:这些看看了解下就可以,真实很少全部用到,记住常用的,
  • beforecreate : 可以在这加个loading事件
  • created : 初始化完成时的事件写在这里,如在这结束loading事件,异步请求也适宜在这里调用
  • mounted : 挂载元素,获取到DOM节点

本文使用 mdnice 排版