自定义v-model
下面的 **input**
使用**:value**
而不是**v-model**
下面的**change1**
和**model.event**
对应
下面的**text1**
属性对应
// parent
<p>{{ name }}</p>
<customModel v-model="name" />
// child
<input type="text" :value="text1" @input="$emit('change1', $event.target.value)" />
<script>
export default {
model: {
prop: 'text1',
event: 'change1'
},
props: {
text1: String
}
}
</script>
$nextTick
- vue是异步渲染的
- data改变后,dom不会立刻改变
- nextTick 是dom渲染完后再回调
- 页面渲染会将data整合,多次修改data只会渲染一次
slot
- 具名插槽
- 作用域插槽
```vue
// 父
// 缩写 #default=”{user}”
{{ user.firstName }}
// 子
> **父级模板里的所有内容都是在父级作用域中编译的;子模版里的所有内容都是在子作用域中编译的**
<a name="nQQA9"></a>
#### 动态组件
语法:`:is="componentName"`
<a name="h2fjZ"></a>
#### 异步组件(组件较大)
语法:`() =>``import``([文件名])`
<a name="ZBTSb"></a>
#### 缓存组件
`keep-alive`
<a name="lY2yh"></a>
#### mixins
多个组件相同逻辑,抽离出来<br />问题:
- 变量来源不明确,不利于阅读
- 多mixin可能会造成命名冲突
- mixin和组件可能出现多对多的关系,复杂度高
<a name="DtGJS"></a>
#### 自定义事件
```javascript
import Vue from 'vue'
export default new Vue()
// event.$emit 和 event.$on