Vue.js上v模型和v绑定之间的差异?

x6h2sr28  于 2023-03-13  发布在  Vue.js
关注(0)|答案(5)|浏览(169)

我正在学习Vue的在线课程,讲师给了我一个练习,让我用默认值输入文本。
我使用v-model完成了它,但是讲师选择了v-bind:value,我不明白为什么。
有人能给予我一个简单的解释这两个之间的区别,什么时候最好使用每一个?

mpgws1up

mpgws1up1#

这里-记住:

<input v-model="something">

本质上与以下内容相同:

<input
   v-bind:value="something"
   v-on:input="something = $event.target.value"
>

或(简写语法):

<input
   :value="something"
   @input="something = $event.target.value"
>

因此v-model是表单输入的双向绑定,它结合了v-bindv-on:inputv-bind***将js值***带入标记,v-on:input更新js值,js值必须存在于datainject中。
当你可以的时候使用v-model。当你必须的时候使用v-bind/v-on:-)我希望你的答案被接受了。
v-modelworks with all the basic HTML input types(文本、文本区域、数字、单选按钮、复选框、选择)。如果您的模型将日期存储为ISO字符串(yyyy-mm-dd),则可以将v-modelinput type=date一起使用。如果您希望在模型中使用日期对象(一旦要操作或格式化它们,这是一个好主意),do this
v-model有一些额外的智能,值得注意。如果您使用IME(许多移动的键盘,或中文/日语/韩语),v-model将不会更新,直到一个单词完成(输入空格或用户离开字段)。v-input将更频繁地触发。
v-model还具有修饰符.lazy.trim.number,这些修饰符在the doc中有所介绍。

yc0p9oo0

yc0p9oo02#

简而言之:
v-model双向绑定
如果你改变输入值,绑定的数据也会改变,反之亦然。
v-bind:value单向绑定
可以通过更改绑定数据来更改输入值,但不能通过element_更改输入值来更改绑定数据。
看看这个简单的例子:https://jsfiddle.net/gs0kphvc/

qybjjes1

qybjjes13#

v型

它是双向数据绑定,用于绑定html输入元素,当您更改输入值时,绑定数据也会随之更改。

v-model仅用于HTML输入元素

ex: <input type="text" v-model="name" >

v型绑定

这是单向数据绑定,意味着你只能绑定数据到输入元素,但不能改变绑定的数据改变输入元素.v-bind是用来绑定html属性
例如:
<input type="text" v-bind:class="abc" v-bind:value="">

<a v-bind:href="home/abc" > click me </a>
a11xaf1n

a11xaf1n4#

v-model用于双向绑定,表示:如果你改变输入值,绑定的数据也会改变,反之亦然。但是v-bind:value被称为单向绑定,这意味着:你可以通过改变绑定数据来改变输入值,但是你不能通过改变元素的输入值来改变绑定数据。
v-model用于表单元素。它允许您将表单元素(例如文本输入)与Vue示例中的数据对象绑定。
示例:https://jsfiddle.net/jamesbrndwgn/j2yb9zt1/1/
v-bind用于组件创建自定义属性。这允许您将数据传递给组件。由于属性是被动的,因此如果传递给组件的数据发生更改,则组件将反映此更改
示例:https://jsfiddle.net/jamesbrndwgn/ws5kad1c/3/

dnph8jn4

dnph8jn45#

有时候你不想使用v-model。如果你有两个输入,并且彼此依赖,你可能会有循环引用的问题。常见的使用情况是如果你正在构建一个会计计算器。
在这些情况下,使用监视器或计算属性都不是一个好主意。
相反,将您的v-model按照上面的答案进行拆分

<input
   :value="something"
   @input="something = $event.target.value"
>

在实践中,如果您以这种方式解耦您的逻辑,那么您可能会调用一个方法。
这是它在真实的场景中的样子:

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <input :value="extendedCost" @input="_onInputExtendedCost" />
  <p> {{ extendedCost }}
</div>

<script>
  var app = new Vue({
    el: "#app",
    data: function(){
      return {
        extendedCost: 0,
      }
    },
    methods: {
      _onInputExtendedCost: function($event) {
        this.extendedCost = parseInt($event.target.value);
        // Go update other inputs here
    }
  }
  });
</script>

相关问题