用了iView,感觉很精髓,故买作者的书,以表敬意。其实看了iView的API对render很感兴趣啊~
插值与表达式:Vue.js 只支持单个表达式,不支持语句和流程控制。另外,在表达式中,不能使用用户自定义的全局变量,只能使用Vue白名单内的全局变量,如Math和Date。
数据驱动DOM是Vue.js的核心概念,所以不到万不得已时不要主动操作DOM,你只需要维护好数据,DOM的事Vue会帮你优雅的处理。
v-bind
的基本用途是动态更新HTML元素上的属性,比如id、class等。
{ { text.split(',').reverse().join('-') } }
引出计算属性。
在一个计算属性里可以完成各种复杂的逻辑,包括运算。函数调用等,只要最终返回一个结果就可以。
计算属性还有两个很实用的小技巧容易被忽略:一个是计算属性可以依赖另一个计算属性;另一个是计算属性不仅可以依赖当前Vue实例的数据,还可以依赖其它实例的数据。
计算属性缓存
- 为什么有了methods,还需要实现计算属性呢?原因就是计算属性是基于它的依赖缓存的。一个计算属性所依赖的数据发生变化时,它才会重新取值,所以只要依赖不变,计算属性也就不更新。
在 v-if
中如果不想复用组件则需要在组件上添加 key
属性
v-if
是真正的条件渲染,它会根据表达式适当地销毁或重建元素及绑定元素或子组件
v-show
只是简单的CSS属性切换,无论条件真与否,都会被编译。
为什么组件的data必须返回一个函数,那是因为如果实例化了多个这个组件,且都引用的是外部对象,则如果一个组件的data某属性变更,则所有组件的data某属性也会跟着变更。
由于HTML特性不区分大小写,当使用DOM模板时,驼峰命名的 props
名称要转为短横分割命名(kabab-case)。但如果杂使用字符串模板,仍然可以忽略这些限制。
在子组件的 自定义属性上 加了v-bind
的属性会自动转换响应的类型,如果不加则只会转换成字符串。
template
的DOM结构必须被一个元素包含,如果直接写成“这里是组件内容”,而不带<div></div>
是无法渲染的。
通常父组件的模板中包含子组件,父组件要正向地向子组件传递数据或参数时,子组件接收到后根据参数的不同来渲染不同的内容或执行操作。这个正向传递数据的过程就是通过props来实现的。
组件的props
值可以是两种:一种是字符串,另一种是对象。
Vue 2x 和 Vue 1x 主要区别有一个就是 单向数据流
。这是因为让子组件尽可能的与父组件解耦。
在JavaScript中对象和数组都是引用类型,指向同一个内存空间,所以props是对象和数据时,在子组件内改变时会影响父组件的。
组件关系可分为父子组件通信、兄弟组件通信、跨级组件通信。
JavaScript的设计模式——观察者模式,其中有dispaEvent何addEventListener两个方法。在Vue中也有对应的两套模式:$emit()
$on()
,其中子组件用$emit()
来触发事件,父组件用$on()
来监听子组件的事件。
非父子组件通信:Vue2中请用中央事件总监(Bus),即在一个空的Vue实例上进行$emit()
和$on()
触发与接收。
我们除了中央总线bus外,还有两种方法实现组件间通信:父链和子组件索引。父链就是$this.parent
,这个可是千万用不得。自组件索引就是ref
,也不是太好用。