> 文章列表 > Vue中使用v-model是多余的吗?v-bind就够了?

Vue中使用v-model是多余的吗?v-bind就够了?

Vue中使用v-model是多余的吗?v-bind就够了?

对于初学者,常常会遇到这样的疑问:为什么需要v-model 我觉得只要有v-bind也就是缩写的:就够了呀?应该也能完成双向绑定吧?

其实不然:

v-bind,它用于单向数据绑定,将组件实例的数据绑定到模板中的 DOM 属性上。例如:

<template><div><input :value="message"><p>{{ message }}</p></div>
</template><script>
export default {data() {return {message: 'Hello, world!'}}
}
</script>

在上面的代码中,我们使用 v-bind:value="message"message 数据绑定到文本框的 value 属性上。此时,当 message 数据发生变化时,文本框的显示值也会相应地发生变化。

但是,由于 v-bind 是单向绑定,只能将组件实例的数据绑定到模板中的 DOM 属性上,而不能实现数据的双向绑定。这意味着,如果用户在文本框中输入了新的文本,那么这个文本并不会自动保存到组件实例的数据中。

为了实现数据的双向绑定,Vue 提供了 v-model 指令。v-model 可以将组件实例的数据与模板中的表单元素进行双向绑定,从而实现数据的自动同步。例如:

<template><div><input v-model="message"><p>{{ message }}</p></div>
</template><script>
export default {data() {return {message: 'Hello, world!'}}
}
</script>

在上面的代码中,我们使用 v-model="message"message 数据与文本框进行双向绑定。这意味着,当用户在文本框中输入新的文本时,message 数据会自动更新,反之亦然。

因此,在需要实现数据的双向绑定时,应该使用 v-model 指令。

综上所述,总结:v-bind不能直接将变化的数据传回到script代码块中,只是说在只要这个个变量发生变化,不管是在script中还是在DOM中,都会触发DOM中这个元素的数据变化,但是如果这个数据只是在DOM中发生改变(如用户输入时),并且没有自己手动的把数据传回到script中的话,那么就不会同步传回到script中!!!

但是!由于我们一般都是通过@事件触发script的函数等等方式改变当前DOM中的元素数据,所以就算其实只用v-bind,大多数情况也都会传回script中的!比较常见的需要用v-model的情况一般都是表单数据

就我个人而言,我觉得之所以需要v-model是因为纯html也能自己实现改变数据,但是我们为了能接收到这个数据的改变,我们js可能不能直接获取到(连v-bind都不行),因此需要v-model进行双向绑定来实现!  得出这个结论的原因是你可以看看下面这个例子:

 

 可以看到v-model给我们自动绑定了input元素的value属性  而这个value属性就是用户能直接通过简单输入改变的值,并且也自动识别出了大概是是bool类型的数据(毕竟是checkbox嘛),所以虽然我们v-model写的是bool这个名字 但是他自动给我们绑定到了input的value属性!!!!!!!!所以其实这个v-model就挺迷得   

至于其他应用场景...看下面:

下面是 10 个不同的应用场景:】】【

  1. 表单输入:用于将表单的值与数据进行双向绑定,如 input、select 等表单元素;
  2. 计算属性:用于将计算属性与表单元素进行双向绑定,以更新计算属性;
  3. 单选按钮:在多个单选按钮中使用 v-model,来控制哪个按钮被选中;
  4. 复选框:用 v-model 来检查复选框是否被选中,并在数据中进行修改;
  5. 多选列表:用 v-model 实现多项选择功能;
  6. 范围输入:用于一次性获取两个值的范围,通常用于 date-time 组件、滑块组件等;
  7. 文本编辑器:用于将文本编辑器的值与数据进行双向绑定,如 Quill、CKEditor 等组件;
  8. Vuex 状态管理:可以将 Vuex 状态管理的 state 与 v-model 进行绑定来实现输入框与 Vuex 的双向绑定;
  9. 自定义组件:可以将自定义组件的值与数据进行双向绑定;
  10. 实时搜索:用于将用户输入框里所输入的值与搜索结果进行双向绑定,以实现实时搜索效果。

总之,v-model 不仅用于输入框的双向绑定,还可以用于用户交互、组件传参等多个场景,方便更好的管理数据。