589 字
3 分钟

v-bind和v-modle

欢迎来到我的博客!#

使用 Markdown 格式编写。

今天学到了什么#

  • v-bind
  • v-model

v-model注意点:#

  • 使用v-model时要切记:v-model绑定的值不能是props传过来的值,因为props是不可以修改的!
  • .props传过来的若是对象类型的值,修改对象中的属性时Vue不会报错,但不推荐这样做。

总结:v-bind只有其中所用到的数据发生变化时,会动态将新数据的值绑到属性值上,但是当页面的属性值发生变化的时候,新的属性值不会放到数据当中

区别详解#

v-bindv-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 来说,近似等价于:
    <input
    type="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
  • 想“回写”,就用 @changev-modelv-model 本质是 :value/checked + @input/change 的组合)

赞助支持

如果这篇文章对你有帮助,欢迎赞助支持!

赞助
最后更新于 2026-03-16,距今已过 169 天

部分内容可能已过时

目录