zoukankan      html  css  js  c++  java
  • vue 声明响应式属性

    声明响应式属性

    由于vue不允许动态添加根级响应式属性,所以你必须在初始化实例前声明根级响应式属性,哪怕只是一个空值:

    var vm = new Vue({
    data: {
    // 声明 message 为一个空值字符串
    message: ''
    },
    template: '<div>{{ message }}</div>'
    })
    // 之后设置 `message`
    vm.message = 'Hello!'
    如果你在data属性中未声明message,vue将警告你渲染函数在试图访问的属性不存在
    这样的限制在背后是有技术原因的,它消除了在依赖项跟踪系统中的一类边界情况,也是vue实例在类型检查系统的帮助下运行的更高效。而且在代码可维护性方面也有一点考虑:data对象就像组件状态的概要,提前声明所有的响应式属性,可以让组件代码在以后阅读或其他开发人员阅读时更易于理解。
    异步更新队列

    可能你还没有注意到,vue异步执行DOM更新,只要观察到数据变化,vue将开启一个队列,并缓冲在同一事件循环中发生的所有数据变化。如果同一个watcher被多次触发,只会一次推入到队列中,这种在缓冲时去除重复数据对于避免不必要的计算和DOM操作上非常重要。然后,在下一个事件循环"tick"中,vue刷新队列并执行实际(已去重)工作。
    vue在内部尝试对异步队列使用原生的promise.then和MutationObserver(突变的观察者),如果执行环境不支持,会采用setTimeout(fn,0)代替。
    例如,当你设置vm.somedata = 'new value',该组件不会立即重新渲染。当刷新队列时,组件会在事件循环队列清空是的下一个“tick”更新。多数情况下,我们不需要关心这个过程,但是如果你想在DOM状态更新后做点什么,这就可能有点棘手。虽然vue通常鼓励开发人员沿着“数据驱动”的方式思考,避免直接接触DOM,但有时我们确实需要这么做,为了在数据变化之后等待vue完成更新DOM,可以再数据变化之后立即使用vue.nextTick(callback)。这样回调函数在DOM更新完成后就会调用。例:
    <div id="example">{{message}}</div>
    var vm = new Vue({
    el: '#example',
    data: {
    message: '123'
    }
    })
    vm.message = 'new message' // 更改数据
    vm.$el.textContent === 'new message' // false
    Vue.nextTick(function () {
    vm.$el.textContent === 'new message' // true
    })
    在组件内使用vue.$nextTick()实例方法特别方便,因为它不需要全局vue,并且回调函数中的this将自动绑定到当前的vue实例上,
    Vue.component('example', {
    template: '<span>{{ message }}</span>',
    data: function () {
    return {
    message: '没有更新'
    }
    },
    methods: {
    updateMessage: function () {
    this.message = '更新完成'
    console.log(this.$el.textContent) // => '没有更新'
    this.$nextTick(function () {
    console.log(this.$el.textContent) // => '更新完成'
    })
    }
    }
    })
  • 相关阅读:
    yolo v1
    012. MVC5中Razor引擎使用模板页
    Centos 7 下, 安装odoo 10
    011. 解决VS2015中CS1528: Expected ; or = (cannot specify constructor arguments in declaration)
    010. VS2015创建MVC项目
    解决IE增强配置的问题
    解决Centos 7 下 tomcat字体异常 Font '宋体' is not available to the JVM
    tomcat7.0在centos7下中文乱码问题解决汇总
    windows服务器审核失败消息:事件ID: 861 进程标识符:904
    使用USBWriter做U盘启动盘后容量变小的解决办法
  • 原文地址:https://www.cnblogs.com/susanws/p/7417111.html
Copyright © 2011-2022 走看看