Heim > Web-Frontend > js-Tutorial > Detaillierte Erläuterung von V-Modell-Instanzen in Komponenten

Detaillierte Erläuterung von V-Modell-Instanzen in Komponenten

零下一度
Freigeben: 2017-06-26 10:36:22
Original
2213 Leute haben es durchsucht

Die Magie des V-Modells


html

<div id="app">
 <input v-model="poin">
  {{ poin }}</div>
Nach dem Login kopieren

js

new Vue({
  el:&#39;#app&#39;,
  data:{poin:&#39;zqz&#39;
  }})
Nach dem Login kopieren

Sobald sich der von uns eingegebene Wert ändert, ändert sich auch der Punktwert in den Daten.

Theoretisch wird ein Ereignis ausgelöst, wenn sich der Wert in den Daten ändert, aber wir haben es nicht gesehen?

wird tatsächlich in der Vue-Dokumentation erklärt:

<input v-model="something">
Nach dem Login kopieren

ist der folgende syntaktische Zucker

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

Der Das input-Ereignis wird bei jeder Eingabe ausgelöst und die Eingabe ist an die Inline-Funktion gebunden, wodurch sich der Wert von something ändert.

Sind Sie neugierig, was das Eingabeereignis ist?

Wenn sich der Wert des Elements <input> oder <textarea> ändert, wird das DOM-Eingabeereignis synchron ausgelöst. (Bei Eingabeelementen mit Typ = Kontrollkästchen oder Typ = Radio wird das Eingabeereignis nicht ausgelöst, wenn der Benutzer auf das Steuerelement klickt, da sich das Wertattribut nicht ändert.) Wenn sich der Inhalt ändert, wird es außerdem im Editor des Contenteditable ausgelöst. In diesem Fall ist das Ereignisziel das Edit-Host-Element. Wenn es zwei oder mehr Elemente mit contenteditable true gibt, ist der „Edit Host“ das nächstgelegene Vorgängerelement, dessen übergeordnetes Element nicht editierbar ist. Ebenso wird es auch auf das Stammelement des designMode-Editors ausgelöst.

Einzelheiten finden Sie unter: MDN-Eingabeereignis

V-Modell in der Komponente


V-Modell-Validierungsprinzip der Komponente

  • Akzeptiert ein value-Attribut

  • Löst das value-Ereignis aus, wenn es ein neues input

< gibt 🎜>uns Schauen Sie sich zuerst den Code an

el-input.vue

<template>

    <div>
      <p>input的封装</p>
      <input type="text"
             ref="input"
             :value="value"
             @input="updateValue($event.target.value)"
             @focus="selectAll"
             >
    </div>

</template>
<script>

export default {
  name: &#39;el-input&#39;,
  props: {
    value: {
      type: Number,
      default: 0
    },
  },
  methods: {
    // 每次都会加一
    updateValue (value) {
      this.$refs.input.value = value + 1;
    },
    selectAll(event) {
      setTimeout(function () {
        event.target.select()
      }, 0)
    }
  }
}

</script>
<style>
</style>
Nach dem Login kopieren
Verwenden Sie diese Komponente in Tom.vue

<style>
</style>
<template>
    <!-- 在父组件中使用 -->
    <div>
      <v-el-input></v-el-input>
    </div>

</template>
<script>
import vElInput from &#39;./el-input.vue&#39;

export default {
  name: &#39;tom&#39;,
  components: {
    vElInput
  }
}

</script>
Nach dem Login kopieren

Detaillierte Erläuterung von V-Modell-Instanzen in Komponenten

Jedes Mal, wenn es verwendet wird, wird am Ende eine 1 hinzugefügt

Aber die Frage ist, wie bekommen wir diesen Wert in Tom.vue?

  • Methode 1: Verwenden Sie Ereignisse, aber es fühlt sich etwas gekrümmt an, um das Land zu retten

  • Methode 2: Verwenden Sie das V-Modell

Dies zeigt die Leistungsfähigkeit des V-Modells, da der obige syntaktische Zucker das

-Ereignis automatisch bindet. Wir können diese Funktion also nutzen, um etwas zu tun. input

V-Modell an die Komponente binden

Ändern Sie den Code von Tom.vue

<template>
    <!-- 在父组件中使用 -->
    <div>
      <v-el-input v-model="eleValue"></v-el-input>
      eleValue的值:{{ this.eleValue }}
    </div>

</template>
<script>
import vElInput from &#39;./el-input.vue&#39;

export default {
  name: &#39;tom&#39;,
  components: {
    vElInput
  },
  data () {
    return {
      eleValue: 666 //设置一个默认值
    }
  }
}

</script>
Nach dem Login kopieren
Anfangszustand


Detaillierte Erläuterung von V-Modell-Instanzen in Komponenten

Das Zustand nach der Eingabe

Detaillierte Erläuterung von V-Modell-Instanzen in Komponenten

Wenn sich dann der von uns eingegebene Wert ändert, ändert sich der

, den wir erwartet haben, immer noch nicht, aber der Wert in el-input.vue ändert sicheleValue

bedeutet das Der Wert wird nach der Änderung nicht an die übergeordnete Komponente übertragen (synchronisiert). Dies ist der Zweck von

in vue1, wurde jedoch in vue2 aufgegeben. .sync

Ändern Sie den el-input.vue-Code und fügen Sie

this.$emit(&#39;input&#39;, value*1)

...updateValue (value) {  this.$refs.input.value = value + 1;  // 触发组件上绑定的input事件,以实现value同步  this.$emit(&#39;input&#39;, value*1)},...
Nach dem Login kopieren
hinzu, um eine Wertesynchronisierung zu erreichen.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von V-Modell-Instanzen in Komponenten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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