96 lines
2.4 KiB
Markdown
96 lines
2.4 KiB
Markdown
# Vue2 数据绑定
|
||
|
||
本示例展示了 Vue2 中的两种数据绑定方式:
|
||
- 单向数据绑定 (`v-bind`)
|
||
- 双向数据绑定 (`v-model`)
|
||
|
||
## 核心概念详解
|
||
|
||
### 1. 数据绑定类型
|
||
|
||
| 类型 | 指令 | 特点 | 示例 |
|
||
| -------- | --------- | ----------------- | ----------------------------- |
|
||
| 单向绑定 | `v-bind` | 数据→视图单向流动 | `<input v-bind:value="name">` |
|
||
| 双向绑定 | `v-model` | 数据⇄视图双向同步 | `<input v-model="name">` |
|
||
|
||
### 2. Vue 实例创建方式
|
||
|
||
```javascript
|
||
// 推荐写法 (ES6简写)
|
||
data() {
|
||
return {
|
||
name: "数据绑定"
|
||
}
|
||
}
|
||
|
||
// 等价于
|
||
data: function() {
|
||
return {
|
||
name: "数据绑定"
|
||
}
|
||
}
|
||
|
||
// 不推荐在组件中使用
|
||
data: {
|
||
name: "数据绑定"
|
||
}
|
||
```
|
||
|
||
### 3. 动态挂载机制
|
||
|
||
```javascript
|
||
// 延迟挂载示例
|
||
setTimeout(() => {
|
||
v.$mount("#app"); // 手动挂载到#app
|
||
}, 1000);
|
||
|
||
// 实例销毁与重建
|
||
setTimeout(() => {
|
||
v.$destroy(); // 销毁旧实例
|
||
|
||
const v2 = new Vue({ // 创建新实例
|
||
data: { name: "新数据绑定" }
|
||
});
|
||
v2.$mount("#root"); // 挂载到新位置
|
||
}, 2000);
|
||
```
|
||
|
||
1. **数据绑定选择**:
|
||
- 表单元素使用 `v-model` 实现双向绑定
|
||
- 普通属性使用 `v-bind` 实现单向绑定
|
||
|
||
2. **实例管理**:
|
||
- 避免在同一个元素上重复挂载不同实例
|
||
- 切换挂载目标时务必先销毁旧实例
|
||
|
||
3. **数据定义**:
|
||
- 组件中必须使用函数形式返回data对象
|
||
- 根实例可以使用对象形式
|
||
|
||
4. **性能优化**:
|
||
- 大量数据绑定时考虑使用计算属性
|
||
- 复杂场景可使用自定义指令优化
|
||
|
||
## 扩展说明
|
||
|
||
### 1. `v-model` 原理
|
||
`v-model` 本质上是语法糖,等价于:
|
||
```html
|
||
<input
|
||
:value="name"
|
||
@input="name = $event.target.value">
|
||
```
|
||
|
||
### 2. 挂载方式对比
|
||
| 方式 | 示例 | 适用场景 |
|
||
| ---------- | ------------------- | -------------------- |
|
||
| el选项 | `el: "#app"` | 初始化时确定挂载点 |
|
||
| $mount方法 | `vm.$mount("#app")` | 需要延迟或条件挂载时 |
|
||
|
||
### 3. 实例生命周期
|
||
- `new Vue()` 创建实例
|
||
- `$mount()` 触发挂载流程
|
||
- `$destroy()` 触发销毁流程
|
||
|
||
通过本文档,您可以全面了解 Vue2 的数据绑定机制和实例管理方法,为实际开发提供参考。
|