Heim > Web-Frontend > View.js > Hauptteil

Anhand von Codebeispielen bringen wir Ihnen das V-Modell bei (es lohnt sich, es zu sammeln)!

青灯夜游
Freigeben: 2021-04-26 18:59:21
nach vorne
2750 Leute haben es durchsucht

Dieser Artikel hilft Ihnen anhand von Codebeispielen, das V-Modell zu verstehen. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Anhand von Codebeispielen bringen wir Ihnen das V-Modell bei (es lohnt sich, es zu sammeln)!

Vue v-model ist eine Direktive, die eine Verbindung zwischen input und form oder zwischen zwei Komponenten in zwei Richtungen herstellt Datenbindung. [Verwandte Empfehlungen: vue.js-Tutorial]v-model是一个指令,它提供了inputform之间或两个组件之间的双向数据绑定。【相关推荐:vue.js教程

这是Vue开发中的一个简单概念,但v-model的真正威力需要花些时间才能理解。

本文主要讲解v-model的不同用例,并学习如何在自己的项目中使用它。

v-model 是什么?

刚才讲过,`v-model是一个我们可以在模板代码中使用的指令。指令是一个模板令牌,它告诉 Vue 我们想要如何处理 DOM。

v-model的情况下,它告诉Vue我们想要在template 中的值和data属性中的值之间创建一个双向数据绑定。

使用v-model的一个常见用例是在设计表单相关的一些元素时。我们可以使用它使input元素能够修改Vue实例中的数据。

<template>
  <div>
    <input 
      type=&#39;text&#39;
      v-model=&#39;value&#39;
    />
    <p> Value: {{ value }} </p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      value: &#39;Hello World&#39;  
    }
  }
}
</script>
Nach dem Login kopieren

当我们在input中输入内容时,我们会看到我们的数据属性正在变化

![上传中...]()

Anhand von Codebeispielen bringen wir Ihnen das V-Modell bei (es lohnt sich, es zu sammeln)!

v-model 和 v-bind 之间的区别?

v-bind指令通常会与v-model切换。两者的区别在于v-model提供了双向数据绑定。

在我们的例子中,这意味着如果我们的数据改变了,我们的input也会改变,如果我们的input改变了,我们的数据也会改变。

v-bind 只以一种方式绑定数据。

当我们想在自己的应用中创建一个清晰的单向数据流时,这是非常有用的。但是,在v-modelv-bind之间选择时必须小心。

v-model 的修饰符

Vue 提供了两个修饰符,允许我们更改v-model的功能。每一个都可以像这样加起来,甚至可以连接在一起。

<input 
  type=&#39;text&#39;
  v-model.trim.lazy=&#39;value&#39;
/>
Nach dem Login kopieren

.lazy

默认情况下,v-model在每个input事件上与Vue实例的状态(数据属性)同步。 这包括获得/失去焦点等。

.lazy修改器修改了我们的v-model,所以它只在更改事件之后同步。这减少了v-model试图与Vue实例同步的次数,在某些情况下,还可以提高性能。

.number

通常,即使输入的是数字类型,input也会自动将输入的值变为字符串。确保将我们的值作为数字处理的一种方法是使用.number修饰符。

根据Vue文档,如果input发生变化,并且parseFloat()无法解析新值,那么将返回输入的最后一个有效值。

<input 
  type=&#39;number&#39;
  v-model.number=&#39;value&#39;
/>
Nach dem Login kopieren

.trim

与大多数编程语言中的trim方法类似,.trim修饰符在返回值之前删除开头或结尾的空白。

在自定义组件中使用 v-model

在Vue中,数据绑定有两个主要步骤:

  • 从父节点传递数据

  • 从子实例发出事件以更新父实例

在自定义组件上使用v-model可以让我们传递一个 prop,用一个指令来处理一个事件。

<custom-text-input v-model="value" />

<!-- IS THE SAME AS -->

<custom-text-input 
   :modelValue="value"
   @update:modelValue="value = $event"
/>
Nach dem Login kopieren

这到底是什么意思?

使用v-model传递的值的默认名称是modelValue。但是,我们也可以像这样传递一个自定义名称。

<custom-text-input v-model:name="value" />
Nach dem Login kopieren

注意:当我们使用自定义模型名称时,发出的方法的名称将为update:name

Anhand von Codebeispielen bringen wir Ihnen das V-Modell bei (es lohnt sich, es zu sammeln)!

在自定义组件中使用 v-model

在自定义组件中使用 v-mode ,需要做两件事:

  • 在 props 中接收 v-model 的值。

  • 当对应的值变化时,发出一个更新事件

ok,首先来声明一下:

export default {
  props: {
    modelValue: String,
  }
}
Nach dem Login kopieren

接下来,将 modelValue 绑定到需要的元素,当值变化时,我们就通过update:modelValue

Dies ist ein einfaches Konzept in der Vue-Entwicklung, aber es Es dauert einige Zeit, die wahre Leistungsfähigkeit von v-model zu verstehen.

In diesem Artikel werden hauptsächlich die verschiedenen Anwendungsfälle von v-model erläutert und Sie erfahren, wie Sie es in Ihren eigenen Projekten verwenden.

Was ist das V-Modell?

Anhand von Codebeispielen bringen wir Ihnen das V-Modell bei (es lohnt sich, es zu sammeln)!Wie gerade erwähnt, ist `v-model eine Direktive, die wir im Vorlagencode verwenden können. Eine Direktive ist ein Vorlagen-Token, das Vue mitteilt, wie wir mit dem DOM umgehen möchten.

🎜Im Fall von v-model teilt es Vue mit, dass wir zwischen dem Wert in der template und dem Wert in den data</code liegen möchten > Attribut Erstellen Sie eine bidirektionale Datenbindung. 🎜🎜Ein häufiger Anwendungsfall für die Verwendung von <code>v-model ist das Entwerfen einiger Elemente im Zusammenhang mit Formularen. Wir können dies verwenden, um dem input-Element das Ändern von Daten in der Vue-Instanz zu ermöglichen. 🎜
<template>
  <div>
    <custom-text-input 
      v-model=&#39;value&#39; 
      v-model:lastName=&#39;lastName&#39;
    />
    <p> Value: {{ value }} </p>
    <p> Last Name: {{ lastName }} </p>
  </div>
</template>

<script>
import CustomTextInput from &#39;./CustomTextInput.vue&#39;

export default {
  components: {
    CustomTextInput,
  },
  data() {
    return {
      value: &#39;Matt&#39;,
      lastName: &#39;Maribojoc&#39;
    }
  }
}
</script>
Nach dem Login kopieren
Nach dem Login kopieren
🎜Wenn wir Inhalte in input eingeben, werden wir sehen, dass sich unsere Datenattribute ändern🎜🎜![Uploading...]()🎜🎜Anhand von Codebeispielen bringen wir Ihnen das V-Modell bei (es lohnt sich, es zu sammeln)!🎜

v-model und v Was ist der Unterschied? zwischen -binden?

🎜Der Befehl v-bind wechselt normalerweise mit v-model. Der Unterschied zwischen den beiden besteht darin, dass v-model eine bidirektionale Datenbindung bietet. 🎜🎜In unserem Fall bedeutet dies, dass sich auch unsere Eingabe ändert, und wenn sich unsere Eingabe ändert, ändern sich auch unsere Daten. 🎜🎜Und v-bind bindet Daten nur auf eine Weise. 🎜🎜Dies ist sehr nützlich, wenn wir in unserer eigenen Anwendung einen klaren unidirektionalen Datenfluss erstellen möchten. Bei der Wahl zwischen v-model und v-bind ist jedoch Vorsicht geboten. 🎜

Modifikatoren des V-Modells

🎜Vue bietet zwei Modifikatoren, mit denen wir die Funktionalität von V-Modell ändern können. Jedes kann auf diese Weise addiert oder sogar miteinander verbunden werden. 🎜
<template>
  <div>
    <label> First Name </label>
    <input 
      type=&#39;text&#39;
      :value=&#39;modelValue&#39;
      placeholder=&#39;Input&#39;
      @input=&#39;$emit("update:modelValue", $event.target.value)&#39;
    />
    <label> Last Name </label>
    <input 
      type=&#39;text&#39;
      :value=&#39;lastName&#39;
      placeholder=&#39;Input&#39;
      @input=&#39;$emit("update:lastName", $event.target.value)&#39;
    />
  </div>
</template>

<script>
export default {
  props: {
    lastName: String,
    modelValue: String,
  }
}
</script>
Nach dem Login kopieren
Nach dem Login kopieren

.lazy

🎜Standardmäßig interagiert v-model bei jedem input-Ereignisstatus mit der Vue-Instanz ( Datenattribute) Synchronisierung. Dazu gehört das Gewinnen/Verlieren des Fokus usw. 🎜🎜Der Modifikator .lazy ändert unser V-Modell, sodass es erst nach dem Änderungsereignis synchronisiert wird. Dies reduziert die Anzahl der Synchronisierungsversuche des V-Modells mit der Vue-Instanz und kann in einigen Fällen die Leistung verbessern. 🎜

.number

🎜Normalerweise wandelt input den Eingabewert automatisch in eine Zeichenfolge um, auch wenn die Eingabe ein numerischer Typ ist. Eine Möglichkeit, sicherzustellen, dass unsere Werte als Zahlen behandelt werden, besteht darin, den Modifikator .number zu verwenden. 🎜🎜Wenn sich input ändert und parseFloat() den neuen Wert nicht analysieren kann, wird laut Vue-Dokumentation der letzte gültige Wert der Eingabe zurückgegeben. 🎜
<custom-text-input 
  v-model.no-whitespace=&#39;value&#39; 
  v-model:lastName=&#39;lastName&#39;
/>
Nach dem Login kopieren
Nach dem Login kopieren

.trim

🎜Ähnlich wie die Trim-Methode in den meisten Programmiersprachen entfernt der Modifikator .trim führende oder nachgestellte Leerzeichen. 🎜

V-Modell in benutzerdefinierten Komponenten verwenden

🎜In Vue gibt es zwei Hauptschritte für die Datenbindung: 🎜
  • 🎜Daten übergeben vom übergeordneten Knoten🎜
  • 🎜Ereignisse von untergeordneten Instanzen ausgeben, um übergeordnete Instanzen zu aktualisieren🎜
🎜v-model für benutzerdefinierte Komponenten verwenden Dies ermöglicht uns die Weitergabe eine Requisite und verwenden Sie eine Direktive, um ein Ereignis zu behandeln. 🎜
props: {
  lastName: String,
  modelValue: String,
  modelModifiers: {
    default: () => ({})
  }
},
Nach dem Login kopieren
Nach dem Login kopieren

Was genau bedeutet das?

🎜Der Standardname für Werte, die mit v-model übergeben werden, ist modelValue</code >. Wir können jedoch auch einen benutzerdefinierten Namen wie diesen übergeben. 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">&lt;label&gt; First Name &lt;/label&gt; &lt;input type=&amp;#39;text&amp;#39; :value=&amp;#39;modelValue&amp;#39; placeholder=&amp;#39;Input&amp;#39; @input=&amp;#39;emitValue(&quot;modelValue&quot;, $event)&amp;#39; /&gt;</pre><div class="contentsignin">Nach dem Login kopieren</div></div><div class="contentsignin">Nach dem Login kopieren</div></div>🎜Hinweis: Wenn wir einen benutzerdefinierten Modellnamen verwenden, lautet der Name der ausgegebenen Methode <code>update:name. 🎜🎜Anhand von Codebeispielen bringen wir Ihnen das V-Modell bei (es lohnt sich, es zu sammeln)!🎜

V-Modell in benutzerdefinierten Komponenten verwenden

🎜Um den V-Modus in benutzerdefinierten Komponenten zu verwenden, müssen Sie zwei Dinge tun: 🎜
  • 🎜Erhalten Sie den Wert von v-model in Requisiten. 🎜
  • 🎜Wenn sich der entsprechende Wert ändert, wird ein Aktualisierungsereignis ausgegeben🎜
🎜OK, zuerst deklarieren wir: 🎜
emitValue(propName, evt) {
  let val = evt.target.value
  if (this.modelModifiers[&#39;no-whitespace&#39;]) {
    val = val.replace(/\s/g, &#39;&#39;)
  }
  this.$emit(`update:${propName}`, val)
}
Nach dem Login kopieren
Nach dem Login kopieren
🎜Als nächstes binden wir den ModelValue an das erforderliche Element, wann Wenn sich der Wert ändert, geben wir den neuen Wert über update:modelValue aus. 🎜🎜Auf diese Weise kann eine Zwei-Wege-Bindung erreicht werden. 🎜🎜🎜🎜

v-model 的使用技巧

上面介绍了如果在自定义组件中使用 v-model,现在来看看一些v-model指令更高级的用法。

对一个组件多次使用v-model

v-model并不局限于每个组件只能使用一个。要多次使用v-model,我们只需要确保唯一命名,并在子组件中正确访问它。

为下面的组件添加第二个 v-model,这里先命名为 lastName:

<template>
  <div>
    <custom-text-input 
      v-model=&#39;value&#39; 
      v-model:lastName=&#39;lastName&#39;
    />
    <p> Value: {{ value }} </p>
    <p> Last Name: {{ lastName }} </p>
  </div>
</template>

<script>
import CustomTextInput from &#39;./CustomTextInput.vue&#39;

export default {
  components: {
    CustomTextInput,
  },
  data() {
    return {
      value: &#39;Matt&#39;,
      lastName: &#39;Maribojoc&#39;
    }
  }
}
</script>
Nach dem Login kopieren
Nach dem Login kopieren

然后,我们内部的子组件:

<template>
  <div>
    <label> First Name </label>
    <input 
      type=&#39;text&#39;
      :value=&#39;modelValue&#39;
      placeholder=&#39;Input&#39;
      @input=&#39;$emit("update:modelValue", $event.target.value)&#39;
    />
    <label> Last Name </label>
    <input 
      type=&#39;text&#39;
      :value=&#39;lastName&#39;
      placeholder=&#39;Input&#39;
      @input=&#39;$emit("update:lastName", $event.target.value)&#39;
    />
  </div>
</template>

<script>
export default {
  props: {
    lastName: String,
    modelValue: String,
  }
}
</script>
Nach dem Login kopieren
Nach dem Login kopieren

运行后,可以看到两个 v-model 都可以正常工作:

Anhand von Codebeispielen bringen wir Ihnen das V-Modell bei (es lohnt sich, es zu sammeln)!

自定义 v-model 的修饰符

Vue中内置了一些修饰符,但这些远远不够,所以有时我们需要自定义自己的修饰符。

假设我们要创建一个修饰符,以删除输入的文本中的所有空格。 我们称之为no-whitespace

<custom-text-input 
  v-model.no-whitespace=&#39;value&#39; 
  v-model:lastName=&#39;lastName&#39;
/>
Nach dem Login kopieren
Nach dem Login kopieren

在组件内,我们可以使用 props 来捕获修改器。自定义修饰符的名称是nameModifiers

props: {
  lastName: String,
  modelValue: String,
  modelModifiers: {
    default: () => ({})
  }
},
Nach dem Login kopieren
Nach dem Login kopieren

我们要做的第一件事是改变@input处理器来使用一个自定义方法。我们可以称它为emitValue,它接受正在编辑的属性和事件对象的名称。

<label> First Name </label>
<input 
      type=&#39;text&#39;
      :value=&#39;modelValue&#39;
      placeholder=&#39;Input&#39;
      @input=&#39;emitValue("modelValue", $event)&#39;
/>
Nach dem Login kopieren
Nach dem Login kopieren

emitValue方法中,在调用$emit之前,我们要检查修饰符。如果no-whitespace修饰符为true,则可以在将其发送给父对象之前修改该值。

emitValue(propName, evt) {
  let val = evt.target.value
  if (this.modelModifiers[&#39;no-whitespace&#39;]) {
    val = val.replace(/\s/g, &#39;&#39;)
  }
  this.$emit(`update:${propName}`, val)
}
Nach dem Login kopieren
Nach dem Login kopieren

运行,完美:

Anhand von Codebeispielen bringen wir Ihnen das V-Modell bei (es lohnt sich, es zu sammeln)!

总结

希望本文能教给大家一些有关Vue v-model的新知识。

在它的基本用例(如表单和input数据)中,v-model是一个非常简单的概念。然而,当我们创建自定义组件并处理更复杂的数据时,我们可以释放v-model的真正威力。

原文地址:https://learnvue.co/2021/01/everything-you-need-to-know-about-vue-v-model/

作者:Michael Thiessen

更多编程相关知识,请访问:编程视频!!

Das obige ist der detaillierte Inhalt vonAnhand von Codebeispielen bringen wir Ihnen das V-Modell bei (es lohnt sich, es zu sammeln)!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!