一、Vue 数据绑定的基本概念
Vue 采用 双向数据绑定,其核心由以下部分组成:
-
数据(Data):Vue 组件的
data
选项或setup
函数返回的响应式状态 -
视图(View):模板(
template
)中的 DOM 结构 -
数据劫持:Vue 监听数据变化,并在数据变更时自动更新视图
Vue采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。
二、Vue 绑定类型及作用
1、单向绑定
-
v-bind:将数据动态绑定到 HTML 属性(如
:id="dynamicId"
)、类/样式(如:class="{ active: isActive }"
)。数据仅从 Vue 实例流向视图 -
插值语法( {{ }} ):在模板中直接插入数据(如
<div>{{ message }}</div>
),数据变化自动更新视图
2、双向绑定(v-model)
-
主要用于表单元素(如
<input v-model="message">
),数据在视图和模型间双向流动。用户输入会同步到数据,数据变更也会更新视图
3、指令绑定
-
条件渲染:如
v-if
(动态添加/移除元素)和v-show
(通过 CSS 控制显隐) -
循环渲染:如
v-for
(遍历数组或对象生成元素)
三、v-model 与 v-bind 的区别
特性 | v-model | v-bind |
---|---|---|
绑定方向 | 双向(视图 ↔ 模型) | 单向(模型 → 视图) |
适用场景 | 表单元素(输入框、复选框等) | 所有 HTML 属性、类、样式等 |
响应性 | 实时同步 | 仅数据变化时更新视图 |
底层实现 | 语法糖,等价于 :value + @input 事件 | 直接绑定属性值 |
v-bind 单向绑定时子组件影响父组件的情况
正常情况下:单向数据流下,子组件无法直接修改父组件传递的 props
例外情况:
若父组件传递的是引用类型(如对象或数组),子组件修改其内部属性(如
obj.key = newValue
)会直接影响父组件的数据,因为引用地址未变