Pixiv - KiraraShss
589 字
3 分钟
v-bind和v-modle
欢迎来到我的博客!
使用 Markdown 格式编写。
今天学到了什么
- v-bind
- v-model
v-model注意点:
- 使用v-model时要切记:v-model绑定的值不能是props传过来的值,因为props是不可以修改的!
- .props传过来的若是对象类型的值,修改对象中的属性时Vue不会报错,但不推荐这样做。
总结:v-bind只有其中所用到的数据发生变化时,会动态将新数据的值绑到属性值上,但是当页面的属性值发生变化的时候,新的属性值不会放到数据当中
区别详解
v-bind 和 v-model 最大区别:一个是单向绑定,一个是双向绑定(语法糖)。
1) v-bind(单向:数据 → 视图)
- 用法:
v-bind:prop="expr",简写:prop="expr" - 只负责把“数据的值”绑定到属性/prop 上
- 例子(你现在的):
<input :checked="isAll">isAll变了,checkbox 会跟着变- 但你手动点 checkbox,不会自动把结果回写到
isAll
2) v-model(双向:数据 ↔ 视图)
- 用法:
v-model="xxx" - 本质是组合:
v-bind+v-on(监听输入事件回写数据) - 对 checkbox 来说,近似等价于:
<inputtype="checkbox":checked="xxx"@change="xxx = $event.target.checked">
- 所以当你写
<input v-model="isAll">,用户勾选时会触发“给 isAll 赋值”,从而调用你 computed 里的set(value)。
结合你这段代码的关键点
- 你现在写
:checked="isAll",computed.isAll.set永远不会被调用(因为没有发生isAll = ...赋值)。 - 要让
set生效:要么改v-model="isAll",要么保留:checked但加@change="checkAllTodo($event.target.checked)"。 - 如果用
v-model,setter 应该写set(value),不是set(e)。
v-bind
v-bind 的作用:把“表达式的值”动态绑定到 HTML 属性 / 组件 prop 上。
1) 绑定普通 HTML 属性
<img v-bind:src="imgUrl"><input v-bind:checked="isAll">含义:属性值不是写死字符串,而是取你 data/computed 里的值;值变了,DOM 属性会自动更新。
2) 简写
v-bind: 可以简写成 :,所以你这行:
<input :checked="isAll">等价于:
<input v-bind:checked="isAll">3) 绑定组件的 props
<MyFooter :todoList="todoList" />把父组件的 todoList 变量传给子组件的 todoList prop。
4) 一次性绑定多个属性(对象展开)
<div v-bind="{ id: boxId, title: tip }"></div>关键点(和你前面的 checkbox 关联)
v-bind 只负责 数据 → 视图(单向)。
:checked="isAll"只会让复选框“显示为” isAll 的状态- 用户手动点复选框并不会自动把值回写到
isAll - 想“回写”,就用
@change或v-model(v-model本质是:value/checked+@input/change的组合)
赞助支持
如果这篇文章对你有帮助,欢迎赞助支持!
最后更新于 2026-03-16,距今已过 169 天
部分内容可能已过时