vue文档阅读笔记2017年10月16日 15:09:34

1、vue与自定义元素的关系

Vue 组件非常类似于 Web 组件规范中的自定义元素(Custom Element)。这是因为 Vue 的组件语法不加限制地效仿参照了此规范。例如 Vue 组件实现了 Slot API 和 is
特殊属性。然而,还是有一些关键区别:

  • 1、Web 组件规范仍然处于草案阶段,而且尚未被浏览器原生实现。相比之下,Vue 组件不需要任何 polyfill 修补,并且在所有支持的浏览器(IE9 及更高版本)之下表现一致。必要时,Vue 组件也能够包含于原生自定义元素规范之内。
  • 2、 Vue 组件提供了普通自定义元素所不具备的一些重要功能,最突出的是跨组件数据流(cross-component data flow)自定义事件通信(custom event communication)以及构建工具集成(build tool integration)

2、vue 如何通过ViewModel来实现数据跟DOM的双向绑定?

当我们把一个普通的js对象传给Vue实例的data选项之后,vue在初始化实例时,将会遍历data这个对象的所有属性,并使用Object.defineProperty把这些属性全部转化为getter和setter。

3、关于data选项

  • 对象必须是纯粹的对象(含有零个或多个的key/value对):浏览器 API 创建的原生对象,原型上的属性会被忽略。大概来说,data 应该只能是数据 - 不推荐观察拥有状态行为的对象????
  • 一旦观察过,不需要再次在数据对象上添加响应式属性。因此推荐在创建实例之前,就声明所有的根级响应式属性。所以,如果你已经提前知道,之后将会用到一个开始是空的或不存在的属性,你就需要预先设置一些初始值。例如:
           data: {
               newTodoText: '',
               visitCount: 0,
               hideCompletedTodos: false,
               todos: [],
               error: null
           }
  • 以 _ 或 $ 开头的属性 不会 被 Vue 实例代理,因为它们可能和 Vue 内置的属性、 API 方法冲突。你可以使用例如 vm.$data._property 的方式访问这些属性。
  • 当一个组件被定义, data 必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例。如果 data 仍然是一个纯粹的对象,则所有的实例将共享引用同一个数据对象!通过提供 data 函数,每次创建一个新实例后,我们能够调用 data 函数,从而返回初始数据的一个全新副本数据对象。
  • 如果需要,可以通过将 vm.$data 传入 JSON.parse(JSON.stringify(...)) 得到深拷贝的原始数据对象。

4、computed缓存 vs method方法

computed 属性会基于它所依赖的数据进行缓存。每个 computed 属性,只有在它所依赖的数据发生变化时,才会重新取值(re-evaluate)。
这也同样意味着,如下的 computed 属性永远不会更新,因为 Date.now() 不是一个响应式的依赖数据:

       computed: {
           now: function () {
               return Date.now()
           }
       }

5、v-if vs v-show

  • v-if支持<template>语法,v-show不支持;
  • v-if是真实的条件渲染,因为它会确保条件块在切换当中适当地销毁与重建条件块内的事件监听器和子组件;
  • v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——在条件第一次变为真时才开始局部编译(编译会被缓存起来),相比之下, v-show 简单得多——元素始终被编译并保留,只是简单地基于 CSS 切换;
  • 一般来说, v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗。因此,如果需要频繁切换使用 v-show 较好,如果在运行时条件不大可能改变则使用 v-if 较好。

猜你喜欢

转载自blog.csdn.net/weixin_33948416/article/details/87639548
今日推荐