独立构建vs运行时构建
- 在按照vue1.0的配置配置好webpack后,会出现
Failed to mount component: template or render function not defined. (found in root instance)
的错误,这里涉及到vue2.0与vue1.0的第一个不同的地方。具体区别独立构建 vs 运行时构建。解决方法为在webpack配置文件中添加如下配置项:
|
|
挂载点的选择
在原来的vue1.0的项目中我使用body
元素作为挂载点,但是在vue2.0中,如果使用body
或者html
作为挂载点,则会报以下警告:Do not mount Vue to <html> or <body> - mount to normal elements instead.
body
或者html
作为根实体的挂载点,但是到了2.0后,只能通过独立的节点挂载,例如:div等,否则报警告
动态组件渲染(跟1.x类似)
多个组件可以使用同一个挂载点,然后动态地在它们之间切换。使用保留的
|
|
keep-alive
如果把切换出去的组件保留在内存中,可以保留它的状态或避免重新渲染。为此可以添加一个 keep-alive
指令参数:
|
|
ref
有时候需要直接在父组件中访问子组件实例,或者直接操作DOM元素,此时需要使用ref
。
ref
被用来给元素或子元素注册引用信息。引用信息会根据父组件的$refs
对象进行注册。如果在普通的DOM元素上使用,引用信息就是元素,如果用在子组件上,引用信息就是组件实例。
|
|
当 v-for
用于元素或组件的时候,引用信息将是包含DOM节点或组件实例数组。
关于ref注册时间的重要说明: 因为ref本身是作为渲染结果被创建的,在初始渲染的时候你不能访问它们 - 它们还不存在!$refs 也不是响应式的,因此你不应该试图用它在模版中做数据绑定。
自定义事件
在vue自定义事件使用$on
与$emit
,前者用于触发监听,后者用于触发,监听可以有两种方式
|
|
组件命名的约定
当注册组件(或者 props)时,可以使用 kebab-case ,camelCase ,或 TitleCase
|
|
在 HTML 模版中,只能使用 kebab-case 形式:
|
|
当使用字符串模式时可以使用 camelCase 、 TitleCase 或者 kebab-case 来引用:
|
|
子组件中使用this
有时候子组件简单,可以在父组件中直接注册,此时在子组件内使用this
就是子组件实例并不是父组件,例如:
|
|
key
的使用
一般情况下,vue在渲染完成后,如果数据发生变化,只会重新渲染数据,不会重新渲染整个元素,但是有时候我们需要元素被重新渲染,此时就需要使用key
关键字,使用v-bind
绑定key
关键字,可以实现在数据发生变化时候重新渲染整个元素。注:同一父级元素下所有子元素如果都要在数据变化后重新渲染元素,则需要被绑定的key
跳过css检测
对于只使用js过度的元素使用v-bind:css="false"
跳过vue对css的检测。
render函数的使用
createElement接受三个参数:
- {String | Object | Function}即一个HTML标签 | 组件选项 | 一个函数,必须返回上述其中一个
- {Object}一个对应HTML标签属性的数据对象(可选)
- {String | Array}子节点(VNode)(可选)
关于第三个参数的说明
- createElement第三个参数,如果是String,则类似于innerHTML,如果是Array,则可以写入一个执行函数,这个函数用于创建另一个DOM结构(而且这里如果想写入一个执行函数,必须是数组!!)
- 每个createElement只能创建一个元素,所以如果是创建多个元素相互嵌套,需要多个createElement函数相互嵌套,最后再render,这个跟原生js创建DOM元素类似
- 如果需要同时渲染多个元素,则需要在第三个参数的数组中,分别写入需要渲染的元素,此时Vue会按照数组中顺序进行渲染
完整数据对象:
|
|