Migration von Vue 1.x


Inhaltsverzeichnis


FAQ


Wow, das ist eine sehr lange Seite! Bedeutet das, dass Vue 2.0 völlig anders ist? Müssen Sie es von Grund auf lernen? Ist es unmöglich, Vue 1.0-Projekte zu migrieren?

Ich freue mich sehr, Ihnen mitteilen zu können, dass dies nicht der Fall ist! Fast 90 % der API und Kernkonzepte bleiben unverändert. Dieser Abschnitt ist etwas lang, da er ausführliche Erläuterungen und viele Migrationsbeispiele enthält. Keine Sorge, Sie müssen diesen Abschnitt nicht von Anfang bis Ende lesen!

Wo soll ich mit der Projektmigration beginnen?

 1. Führen Sie zunächst das Migrationstool unter dem aktuellen Projekt aus. Wir haben großen Wert darauf gelegt, den erweiterten Vue-Upgrade-Prozess auf die Verwendung eines einfachen Befehlszeilentools zu vereinfachen. Wenn das Tool eine ältere Funktion erkennt, benachrichtigt es Sie und gibt Empfehlungen sowie Links zu weiteren Informationen.

2. Durchsuchen Sie dann den in der Seitenleiste dieser Seite aufgeführten Inhalt. Wenn Sie feststellen, dass einige Titel Auswirkungen auf Ihr Projekt haben, das Migrationstool jedoch keine entsprechende Meldung ausgibt, überprüfen Sie bitte Ihr Projekt.

 3. Wenn Ihr Projekt über Testcode verfügt, führen Sie ihn aus und sehen Sie, wo er immer noch fehlschlägt. Wenn Sie keinen Testcode haben, öffnen Sie Ihre Anwendung in einem Browser, navigieren Sie herum und achten Sie auf etwaige Fehler oder Warnungen.

4. Ihre Anwendung sollte nun vollständig migriert sein. Wenn Sie mehr erfahren möchten, können Sie den Rest dieser Seite lesen – oder im Abschnitt Einführung von vorne beginnen und in die neue Dokumentation und verbesserte Anleitung eintauchen. Viele Abschnitte wurden weggelassen, da Sie mit einigen der Kernkonzepte bereits vertraut sind.

Wie lange dauert die Migration einer Vue 1.x-Versionsanwendung auf 2.0?

Dies hängt von mehreren Faktoren ab:

  • Hängt von der Größe Ihrer Anwendung ab (kleine und mittlere Anwendungen können grundsätzlich in einem durchgeführt werden). Tag) .

  • Je nachdem, wie oft Sie abgelenkt werden und die coolste neue Funktion von 2.0 starten. Ich kann die Zeit nicht sagen, das passiert oft, wenn wir 2.0-Apps erstellen!

  • Hängt davon ab, welche Legacy-Funktionen Sie verwenden. Die meisten können über Suchen und Ersetzen aktualisiert werden, bei einigen kann es jedoch eine Weile dauern. Wenn Sie Best Practices nicht befolgen, wird Vue 2.0 sein Bestes geben, um Sie zur Einhaltung zu zwingen. Dies ist gut für den langfristigen Betrieb des Projekts, kann aber auch eine erhebliche Umgestaltung bedeuten (obwohl einige der Teile, die umgestaltet werden müssen, möglicherweise veraltet sind).

Wenn ich auf Vue 2 aktualisiere, muss ich dann auch Vuex und Vue Router gleichzeitig aktualisieren?

Nur ​​Vue Router 2 bleibt mit Vue 2 kompatibel, daher muss Vue Router aktualisiert werden und Sie müssen die Vue Router-Migrationsmethode befolgen, um damit umzugehen. Glücklicherweise verfügen die meisten Anwendungen nicht über viel Router-bezogenen Code, sodass die Migration wahrscheinlich nicht länger als eine Stunde dauern wird.

Für Vuex bleibt Version 0.8 mit Vue 2 kompatibel, sodass für einige Teile kein Upgrade erzwungen werden muss. Der einzige Grund für ein Upgrade jetzt ist, wenn Sie die neuen erweiterten Funktionen in Vuex 2 nutzen möchten, wie z. B. Module und reduzierte Boilerplate.


Vorlage



Fragmentinstanz Entfernen

Jede Komponente darf nur ein Stammelement haben. Fragmentinstanzen sind nicht mehr zulässig, wenn Sie eine Vorlage wie diese haben:

<p>foo</p>
<p>bar</p>

Es ist besser, einfach den gesamten Inhalt in ein neues Element zu packen, wie folgt:

<div>
  <p>foo</p>
  <p>bar</p>
</div>

Upgrade-Methode

Führen Sie die End-to-End-Testsuite (End-to-End-Testsuite) aus oder führen Sie die Anwendung anschließend aus das Upgrade, und schauen Sie sich Konsolenwarnungen an, um Stellen in Vorlagen zu finden, die mehrere Stammelemente haben.


Lebenszyklus-Hook-Funktion



beforeCompilebeforeCompile Entfernen

created

und stattdessen die Hook-Funktion

verwenden.

Upgrade-Methode

Führen Sie das
Migrationstool

in der Codebasis aus, um alle Funktionen zu finden, die diesen Hook verwenden Beispiel.

compiledkompiliert

mountedErsetzen Sie

durch die Hook-Funktion .

Upgrade-Methode


Führen Sie das

Migrationstool

in der Codebasis aus, um alle Funktionen zu finden, die diesen Hook verwenden Beispiel. attached

angehängt

Entfernen

Verwenden Sie die integrierte DOM-Prüfmethode anderer Hook-Funktionen. Ersetzen Sie beispielsweise Folgendes:

attached: function () {
  doSomething()
}

kann wie folgt verwendet werden:

mounted: function () {
  this.$nextTick(function () {
    doSomething()
  })
}

Upgrade-Methode

detached in der Codebasis Führen Sie das Migrationstool aus, um alle Beispiele zu finden, die diese Hook-Funktion verwenden.

freistehend

Entfernen

und verwenden Sie die DOM-Prüfmethode in anderen Hook-Funktionen. Ersetzen Sie beispielsweise Folgendes:

detached: function () {
  doSomething()
}

kann wie folgt verwendet werden:
destroyed: function () {
  this.$nextTick(function () {
    doSomething()
  })
}
<🎜><🎜><🎜><🎜>Upgrade-Methode<🎜><🎜><🎜><🎜> in der Codebasis Führen Sie das <🎜>Migrationstool<🎜> aus, um alle Beispiele zu finden, die diese Hook-Funktion verwenden. <🎜><🎜>


init Umbenennen

Verwenden Sie stattdessen die neue Hook-Funktion beforeCreate. Im Wesentlichen sind beforeCreate und init genau gleich. init wurde umbenannt, um der Benennung anderer Lebenszyklusmethoden zu entsprechen.

Upgrade-Methode

Führen Sie das Migrationstool in der Codebasis aus, um alle Funktionen zu finden, die diesen Hook verwenden Beispiel.


readybereit ersetzt

mountedmountedVue.nextTick durch die neue vm.$nextTick Hook-Funktion. Es ist zu beachten, dass die Verwendung von

nicht garantiert, dass this.$el in der Hook-Funktion im Dokument vorhanden ist. Zu diesem Zweck sollte auch
/

eingeführt werden. Zum Beispiel:

mounted: function () {
  this.$nextTick(function () {
    // 代码保证 this.$el 在 document 中
  })
}

Upgrade-Modus

Führen Sie das
Migrationstool

in der Codebasis aus, um das herauszufinden alle Verwendungen Beispiel dieser Hook-Funktion.

v-for


v-for

v-forv-for

index Die Parameterreihenfolge beim Durchlaufen des Arrays (index, value) ändert sich in (value, index)forEachmap

Wenn enthalten ist, war die vorherige Parameterreihenfolge beim Durchlaufen des Arrays . Es soll nun mit den nativen Array-Methoden von JavaScript (wie und

) konsistent sein.

positionnumUpgrade-Methode

<🎜><🎜>Führen Sie das <🎜>Migrationstool<🎜> in der Codebasis aus, um diejenigen zu identifizieren, die die alten Parameter verwenden Beispiel für eine Sequenz. Beachten Sie, dass das Migrationstool sie nicht markiert, wenn Sie Ihren Indexparametern einen ungewöhnlichen Namen geben (z. B. <🎜> oder <🎜>). <🎜><🎜>


v-forParameterreihenfolge beim Durchlaufen des Objekts Änderung

Wenn eine Eigenschaft enthalten ist Name / Schlüssel, die Parameterreihenfolge des vorherigen Durchlaufobjekts ist (name, value). Nun (value, name), um mit gängigen Objektiteratoren (z. B. lodash) konsistent zu sein.

Upgrade-Methode

Führen Sie das Migrationstool in der Codebasis aus, um diejenigen zu finden, die die alten Parameter verwenden Beispiel für eine Sequenz. Beachten Sie, dass das Migrationstool Ihre Schlüsselparameter nicht markiert, wenn Sie sie ungewöhnlich benennen (z. B. name oder property).


$index$index$key und Entfernt

$index$keyv-forDie beiden implizit deklarierten Variablen

und
wurden entfernt, damit sie in

explizit definiert werden können. Dies ermöglicht Entwicklern ohne viel Erfahrung in der Vue-Entwicklung, den Code besser zu lesen, und führt außerdem zu einem saubereren Verhalten beim Umgang mit verschachtelten Schleifen.

Upgrade-Methode

Führen Sie das MigrationstoolUncaught ReferenceError: $index is not defined in der Codebasis aus, um herauszufinden, welche Variablen verwendet werden entferntes Beispiel. Wenn Sie es nicht finden, können Sie auch unter

Konsolenfehler
danach suchen (z. B.

).

track-byTrack-by

track-byersetztkeyv-bind:

wurde durch
ersetzt, es funktioniert wie andere Attribute, ohne

oder Präfix, es wird behandelt als String. In den meisten Fällen müssen Sie statische Schlüssel durch dynamische Bindung mit vollständigen Ausdrücken ersetzen. Um zum Beispiel zu ersetzen:

<div v-for="item in items" track-by="id">
sollten Sie jetzt schreiben:
<div v-for="item in items" v-bind:key="item.id">

Upgrade-Wegtrack-by

<🎜> im Codebasis Führen Sie das <🎜>Migrationstool<🎜> aus, um Beispiele zu finden, die <🎜> verwenden. <🎜><🎜>


v-for Bereichswert ändert sich

vor v-for="number in 10" > Beginnend bei 0 und endet bei 9, jetzt beginnt bei 1 und endet bei 10 vorbei. number

Upgrade-Methode

Verwenden Sie die reguläre

Suche in der Codebasis. Wenn Sie in /w in d / erscheinen, prüfen Sie bitte, ob es betroffen ist. v-for


Requisiten



coercezwingen Prop-Parameter Entfernen

Wenn Sie den Wert von Prop überprüfen müssen, erstellen Sie einen intern berechneten Wert statt in Props Definieren Sie es intern, zum Beispiel:

props: {
  username: {
    type: String,
    coerce: function (value) {
      return value
        .toLowerCase()
        .replace(/\s+/, '-')
    }
  }
}

sollte jetzt geschrieben werden als:

props: {
  username: String,
},
computed: {
  normalizedUsername: function () {
    return this.username
      .toLowerCase()
      .replace(/\s+/, '-')
  }
}
    Das hat einige Vorteile:
  • Sie können die ursprüngliche Requisite behalten Wert Betriebserlaubnis.
  • Zwingt Entwickler dazu, explizite Deklarationen zu verwenden, indem sie dem validierten Wert einen anderen Namen geben.

Upgrade-Methode

Führen Sie das coerceMigrationstool aus

Finden Sie heraus, was
Beispiel einer Option.


twoWaytwoWay

Parameter von Prop

Entfernt

Globale Zustandsverwaltung

Upgrade-MethodetwoWay

Führen Sie das <🎜>Migrationstool<🎜> aus, um die Instanz zu finden, die den Parameter <🎜> enthält. <🎜><🎜>Die Modifikatoren

und

entfernen

v-bind.onceRequisiten können jetzt nur noch in eine Richtung weitergegeben werden. Um eine umgekehrte Wirkung auf die übergeordnete Komponente zu erzielen, muss die untergeordnete Komponente ein Ereignis explizit übergeben, anstatt sich auf eine implizite bidirektionale Bindung zu verlassen. Einzelheiten finden Sie unter: .syncBenutzerdefiniertes Komponentenereignis

Führen Sie das

Migrationstool aus, um Instanzen zu finden, die die Modifikatoren .once und verwenden.

.sync

Requisiten ändern
Veraltet


Requisiten innerhalb der Komponente ändern Es ist ein Anti-Pattern (nicht empfohlen). Deklarieren Sie beispielsweise zuerst eine Requisite und ändern Sie dann den Wert der Requisite über in der Komponente. Gemäß dem Rendering-Mechanismus wird beim erneuten Rendern der übergeordneten Komponente auch der interne Requisitenwert der untergeordneten Komponente überschrieben. In den meisten Fällen kann das Ändern des Prop-Werts durch die folgenden Optionen ersetzt werden:

Über das Datenattribut verwenden Sie prop, um den Standardwert eines Datenattributs festzulegen . this.myProp = 'someOtherValue'

Durch das berechnete Attribut.
  • Upgrade-Methode

Führen Sie den End-to-End-Test aus und überprüfen Sie die

-Kontrolle zur Requisitenmodifikation Taiwan-Warnmeldung .

Requisiten für Root-Instanz
ersetzt


für eine Root Instanz Für Instanzen (zum Beispiel: Instanzen, die mit erstellt wurden) können Sie nur verwenden statt .

new Vue({ ... })Upgrade-MethodepropsDataprops

Führen Sie den End-to-End-Test aus, und

fehlgeschlagene Tests werden angezeigt um Sie zu benachrichtigen. Die Root-Instanz von ist abgelaufen.


Berechnetes Eigentum



cache: false Cache: false Veraltet

In zukünftigen Hauptversionen von Vue werden Eigenschaften berechnet. Der Cache Die Verifizierung wird entfernt. Das Konvertieren nicht zwischengespeicherter berechneter Eigenschaften in Methoden führt zu denselben Ergebnissen wie zuvor.

Beispiel:
template: '<p>message: {{ timeMessage }}</p>',
computed: {
  timeMessage: {
    cache: false,
    get: function () {
      return Date.now() + this.message
    }
  }
}

oder verwenden Sie die Komponentenmethode:

template: '<p>message: {{ getTimeMessage() }}</p>',
methods: {
  getTimeMessage: function () {
    return Date.now() + this.message
  }
}

Upgrade-Methode

cache: falseFühren Sie das

Migrationstool
aus, um die Option

zu finden.

Eingebaut Befehle


v-bindv-bind

Wahr/Falsch-Wert

Geändertv-bindnullundefinedfalse0v-bind:draggable="''" Bei Verwendung von draggable="true" in 2.0 werden nur

,

und "false" als falsch behandelt. Dies bedeutet, dass attr="false" und leere Zeichenfolgen als wahre Werte gerendert werden. Beispielsweise wird

als
gerendert.

v-ifFür Aufzählungseigenschaften wird zusätzlich zu den oben genannten falschen Werten die Zeichenfolge v-show auch als

gerendert.

Beachten Sie, dass für andere Hook-Funktionen (wie und ) weiterhin die allgemeinen Regeln von js zur Beurteilung von wahren und falschen Werten gelten.

Upgrade-Methode


Führen Sie End-to-End-Tests durch, wenn wahrscheinlich ein Teil Ihrer App betroffen ist Durch dieses Upgrade auf wird die Fehlermeldung „fehlgeschlagen“ angezeigt Testsv-on

Verwenden Sie

, um auf native Ereignisse zu achtenv-onÄndern$emit.native

Die Verwendung von für eine Komponente überwacht jetzt nur noch benutzerdefinierte Ereignisse (Ereignisse, die durch Komponenten mit ausgelöst werden). Wenn Sie die nativen Ereignisse des Stammelements abhören möchten, können Sie den Modifikator verwenden, z. B.:

<my-component v-on:click.native="doSomething"></my-component>

Upgrade-Methode

<🎜><🎜> in Führen Sie das <🎜>Migrationstool<🎜> in der Codebasis aus, um alle Beispiele zu finden, die diese Hook-Funktion verwenden. <🎜><🎜>


debouncev-modelmit Entfernen

Entprellung wurde einst zur Steuerung verwendet die Häufigkeit von Ajax-Anfragen und anderen zeitintensiven Aufgaben. Die v-model-Attributparameter von debounce in Vue machen es in einigen einfachen Fällen sehr einfach, diese Art der Steuerung zu erreichen. Tatsächlich dient dies jedoch dazu, die Häufigkeit von Statusaktualisierungen zu steuern, und nicht die zeitaufwändige Aufgabe selbst. Dies ist ein kleiner Unterschied, der jedoch mit zunehmender Größe Ihrer Anwendung zu einer Einschränkung wird.

Zum Beispiel Einschränkungen beim Entwerfen einer Suchaufforderung:

1.gif

Mit dem Parameter debounce können Sie den Status „Tippen“ nicht beobachten. Weil der Eingangsstatus nicht in Echtzeit erkannt werden kann. Durch die Entkopplung debounce von Vue können wir diese Einschränkungen jedoch vermeiden, indem wir nur die Vorgänge verzögern, die wir steuern möchten:

<!--
通过使用 lodash 或者其它库的 debounce 函数,
我们相信 debounce 实现是一流的,
并且可以随处使用它,不仅仅是在模板中。
-->
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.js"></script>
<div id="debounce-search-demo">
  <input v-model="searchQuery" placeholder="Type something">
  <strong>{{ searchIndicator }}</strong>
</div>
rrree

Ein weiterer Vorteil dieses Ansatzes besteht darin, dass bei der Ausführung der umschlossenen Funktion die Zeit gleich ist Aufgrund der Verzögerungszeit wird länger gewartet. Wenn Sie beispielsweise Suchvorschläge machen, müssen Sie warten, bis der Benutzer eine Zeit lang mit der Eingabe aufhört, bevor Sie Vorschläge machen, was eine sehr schlechte Erfahrung ist. Tatsächlich ist es zu diesem Zeitpunkt besser geeignet, die Funktion Drosselung zu verwenden. Da Sie jetzt die Freiheit haben, Bibliotheken wie lodash zu verwenden, können Sie Ihr Projekt mithilfe der Drosselung schnell umgestalten.

Upgrade-Pfad

Führen Sie die Instanz Migrationstool mit dem Parameter debounce aus.


Verwenden Sie den Parameter lazy oder number von v-model . ersetzt

lazy und number Parameter werden jetzt in Form von Modifikatoren verwendet, wodurch es klarer aussieht:

new Vue({
  el: '#debounce-search-demo',
  data: {
    searchQuery: '',
    searchQueryIsDirty: false,
    isCalculating: false
  },
  computed: {
    searchIndicator: function () {
      if (this.isCalculating) {
        return '⟳ Fetching new results'
      } else if (this.searchQueryIsDirty) {
        return '... Typing'
      } else {
        return '✓ Done'
      }
    }
  },
  watch: {
    searchQuery: function () {
      this.searchQueryIsDirty = true
      this.expensiveOperation()
    }
  },
  methods: {
    // 这是 debounce 实现的地方。
    expensiveOperation: _.debounce(function () {
      this.isCalculating = true
      setTimeout(function () {
        this.isCalculating = false
        this.searchQueryIsDirty = false
      }.bind(this), 1000)
    }, 500)
  }
})

wird jetzt so geschrieben:

<input v-model="name" lazy>
<input v-model="age" type="number" number>

Upgrade-Methode

Führen Sie das Migrationstool aus, um diese veralteten Parameter zu finden.


Verwenden Sie inline value für v-model , um

v-model zu entfernen Nicht mehr inline value Der auf diese Weise initialisierte Anfangswert verwendet offensichtlich das entsprechende Attribut der Instanzdaten als tatsächlichen Anfangswert.

Das bedeutet, dass das folgende Element:

<input v-model.lazy="name">
<input v-model.number="age" type="number">

mit dem Folgenden in der Datenoption:

<input v-model="text" value="foo">

das Modell als „bar“ statt als „foo“ rendert. Ebenso gilt für den vorhandenen Wert von <textarea>:

data: {
  text: 'bar'
}

muss sicherstellen, dass der Anfangswert von text „Hallo“ ist Welt"

Upgrade-Methode

Führen Sie den End-to-End-Test nach dem Upgrade durch und achten Sie auf v-model Inline-Parameter Konsole Warnungen


v-modelV-Modellv-for mit Iterierten Grundwerten Entfernen

<input>So zu schreiben wird nicht funktionieren:

<textarea v-model="text">
  hello world
</textarea>

Weil v-model in js-Code ähnlich dem folgenden kompiliert wird: str

<input v-for="str in strings" v-model="str">

Auf diese Weise ist die bidirektionale Bindung von

hier ungültig. Das Zuweisen von v-model zu einem anderen Wert im Iterator funktioniert ebenfalls nicht, da es sich lediglich um eine Variable innerhalb der Funktion handelt.

Die Alternative besteht darin, dass Sie ein Objektarray verwenden können, damit

die Felder im Objekt synchron aktualisieren kann, zum Beispiel:

strings.map(function (str) {
  return createElement('input', ...)
})

Upgrade Methode

Führen Sie den Test Ihrer App aus Wenn ein Ort von diesem Update betroffen ist, wird eine Meldung zu fehlgeschlagenen Tests eingeblendet.

!importantv-bind:style mit Entfernen

!importantDas Schreiben wie folgt ist ungültig:

<input v-for="obj in objects" v-model="obj.str">
Wenn Sie wirklich andere überschreiben müssen

, am besten schreiben Sie es in String-Form:

<p v-bind:style="{ color: myColor + ' !important' }">hello</p>

Upgrade-Methode

!importantRun

Migration Help Werkzeug
. Suchen Sie das Stilbindungsobjekt, das <🎜> enthält. <🎜><🎜>


v-el und v-ref ersetzen

Der Einfachheit halber werden v-el und v-ref zusammengeführt in ein ref-Attribut, das in der Komponenteninstanz übergeben werden kann $refs anrufen. Das bedeutet, dass v-el:my-element so geschrieben wird: ref="myElement" und v-ref:my-component so wird: ref="myComponent". Bei der Bindung an ein allgemeines Element bezieht sich ref auf ein DOM-Element. Bei der Bindung an eine Komponente handelt es sich bei ref um eine Komponenteninstanz.

Da v-ref keine Anweisung mehr, sondern ein spezielles Attribut ist, kann es auch dynamisch definiert werden. Dies ist nützlich, wenn es mit v-for kombiniert wird:

<p v-bind:style="'color: ' + myColor + ' !important'">hello</p>

Bisher führte die Verwendung von v-el/v-ref mit v-for zu einem DOM-Array oder Komponentenarray, da es keine Möglichkeit gab, jedem A eine spezifische Angabe zu geben Name für das Element. Sie können dies immer noch tun und jedem Element das gleiche ref geben:

<p v-for="item in items" v-bind:ref="'item' + item.id"></p>

Im Gegensatz zu 1.x reagieren $refs nicht, da sie während des Renderns registriert/aktualisiert werden. Nur wenn Sie auf Änderungen achten und diese wiederholt rendern, können Sie sie reaktionsfähig machen.

Andererseits ist das Design $refs hauptsächlich für den Zugriff durch JS-Programme vorgesehen, und es wird nicht empfohlen, sich in Vorlagen zu sehr darauf zu verlassen. Denn das bedeutet, dass auf den Instanzstatus außerhalb der Instanz zugegriffen werden muss, was dem datengesteuerten Denken von Vue zuwiderläuft.

Upgrade-Methode

Führen Sie das Migrationstool aus, um v-el und v-ref herauszufinden in der Instanz.


v-showv-showv-elseSpäter verwenden Entfernen

v-elsev-showv-ifv-show kann nach

nicht mehr verwendet werden. Bitte verwenden Sie stattdessen

im negativen Zweig von

. Zum Beispiel:
<p v-for="item in items" ref="items"></p>

sollte jetzt so geschrieben werden:

<p v-if="foo">Foo</p>
<p v-else v-show="bar">Not foo, but bar</p>

l Im Level-Modus

v-else wird das v-showMigrationstool

ausgeführt, um herauszufinden, welche
und <🎜> in der Instanz vorhanden sind. <🎜><🎜>


Benutzerdefinierte AnweisungenVereinfacht


In der neuen Version ist die Verwendung von Anweisungen Der Umfang wurde stark reduziert: Jetzt wird die Direktive nur noch für die DOM-Manipulation auf niedriger Ebene verwendet. In den meisten Fällen ist es am besten, Komponenten als Abstraktionsschicht für die Wiederverwendung von Code zu verwenden.

Die wesentlichen Änderungen sind wie folgt:

  • Die Direktive hat keine Instanz mehr. Das heißt, Sie haben das this der Instanz nicht mehr in der Hook-Funktion der Direktive. Stattdessen können Sie in den Parametern alle benötigten Daten übernehmen. Wenn Sie es wirklich brauchen, können Sie über el auf die Instanz zugreifen.

  • Ähnlich wie acceptStatement , deep , priority usw. sind veraltet. Informationen zum Ersetzen der 双向-Direktive finden Sie unter Beispiel.

  • Jetzt ist die Bedeutung einiger Hooks anders als zuvor und es gibt zwei weitere Hook-Funktionen.

Glücklicherweise ist der neue Haken einfacher und leichter zu beherrschen. Weitere Informationen finden Sie im Anleitung zu benutzerdefinierten Befehlen.

Upgrade-Methode

Führen Sie das Migrationstool aus, um herauszufinden, wo die Direktive definiert ist. Das Hilfstool markiert diese Stellen, da diese Stellen wahrscheinlich umgestaltet werden müssen.


Richtlinie.literalModifikatorEntfernen

.literal Modifikatoren wurden entfernt. Um die gleiche Funktionalität zu erhalten, können Sie einfach Zeichenfolgenmodifikatoren als Werte angeben.

Beispiel wie folgt ändern:

<p v-if="foo">Foo</p>
<p v-if="!foo && bar">Not foo, but bar</p>

Einfach:

<p v-my-directive.literal="foo bar baz"></p>

Upgrade-Methode

Führen Sie das Migrationstool aus, um herauszufinden, was in der Instanz verwendet wird Ein Platz für den Modifikator „.literal“.


Übergang



transitionÜbergang Der Parameter ersetzt

<transition><transition-group>transitionÜbergangseffekte werden jetzt durch die Verwendung von und zum Umschließen von Elementen erreicht der Verwendung des

-Attributs. Weitere Informationen finden Sie im
Übergangsleitfaden

.

Upgrade-Methode

transitionFühren Sie das

Migrationstool
aus, um herauszufinden, wo das

-Attribut verwendet wird.

Vue.transitionWiederverwendbare Übergänge Ersetzen

Im neuen Übergangssystem können Sie
Übergangseffekte

über Vorlagen wiederverwenden.

Upgrade-Methode

transitionFühren Sie das

Migrationstool
aus, um herauszufinden, wo das

-Attribut verwendet wird.

stagger Übergangsparameter entfernt

data-index Wenn Sie Wenn Sie beim Rendern von Listen einen allmählichen Übergang verwenden möchten, können Sie dies tun, indem Sie das

des Elements festlegen (oder ähnliche Eigenschaften) zur Steuerung der Zeit. Bitte beachten Sie
dieses Beispiel

.

Upgrade-Methode

transitionFühren Sie das

Migrationstool
aus, um herauszufinden, wo das <🎜>-Attribut verwendet wird. Während eines Upgrades können Sie auf eine neue Übergangsstrategie „übergehen“. <🎜><🎜>


Veranstaltung



eventsEreignisse Die Option Entfernt

eventscreated$dispatch ist veraltet. Event-Handler sind jetzt in $broadcast Hooks registriert. Siehe detaillierte Beispiele

und

Migrationsleitfaden

Vue.directive('on').keyCodesVue.directive('on').keyCodes

keyCodes ersetzt Vue.config.keyCodes

durch die neue prägnante Konfiguration durch Zum Beispiel:

<p v-my-directive="'foo bar baz'"></p>

Upgrade-MethodekeyCode

<🎜>Führen Sie das <🎜>Migrationstool <🎜>Find out-of aus -Datum <🎜>Konfiguration<🎜><🎜>


$dispatch und $broadcast ersetzt

$dispatch und $broadcast ist veraltet. Bitte verwenden Sie eine prägnantere und klarere Kommunikation zwischen Komponenten und bessere Zustandsverwaltungslösungen, wie zum Beispiel: Vuex.

Weil die auf der Komponentenbaumstruktur basierende Ereignisflussmethode wirklich schwer zu verstehen ist und mit zunehmender Komponentenstruktur immer fragiler wird. Diese Ereignismethode ist wirklich nicht gut und wir möchten den Entwicklern in Zukunft nicht zu viel Ärger bereiten. Und $dispatch und $broadcast lösen nicht das Kommunikationsproblem zwischen Geschwisterkomponenten.

Der einfachste Weg, $dispatch und $broadcast zu aktualisieren, besteht darin, Event Hubs zu verwenden, um Komponenten eine freie Kommunikation zu ermöglichen, unabhängig davon, wo sie sich in der Komponentenstruktur befinden. Da Vue-Instanzen eine Event-Dispatch-Schnittstelle implementieren, können Sie dies erreichen, indem Sie eine leere Vue-Instanz instanziieren.

Eine der häufigsten Anwendungen dieser Methoden ist die Kommunikation zwischen Eltern-Kind-Komponenten. In diesen Fällen können Sie v-on verwenden, um auf Änderungen in $emit für untergeordnete Komponenten zu warten. Dadurch können Sie ganz einfach die Sichtbarkeit von Ereignissen hinzufügen.

$emit ist jedoch nicht sinnvoll, wenn Sie über mehrere Ebenen von Eltern-Kind-Komponenten kommunizieren. Im Gegensatz dazu ermöglicht die Verwendung zentralisierter Event-Middleware einfache Upgrades. Dies macht die Kommunikation zwischen Komponenten sehr reibungslos, auch wenn es sich um Geschwister handelt. Da Vue Instanzen über die Ereignis-Emitter-Schnittstelle ausführt, können Sie tatsächlich eine leere Vue-Instanz verwenden.

Angenommen, wir haben beispielsweise eine Aufgabenanwendungsstruktur wie folgt:

// v-on:keyup.f1 不可用
Vue.config.keyCodes.f1 = 112

Sie können die Kommunikation zwischen Komponenten über ein separates Ereigniscenter verwalten:

Todos
├─ NewTodoInput
└─ Todo
   └─ DeleteTodoButton

Dann in der Komponente: Sie können $emit, $on, $off verwenden Ereignisse verteilen, abhören bzw. abhören:

// 将在各处使用该事件中心
// 组件通过它来通信
var eventHub = new Vue()
// NewTodoInput
// ...
methods: {
  addTodo: function () {
    eventHub.$emit('add-todo', { text: this.newTodoText })
    this.newTodoText = ''
  }
}
// DeleteTodoButton
// ...
methods: {
  deleteTodo: function (id) {
    eventHub.$emit('delete-todo', id)
  }
}

Dies kann in einfachen Fällen $dispatch und $broadcast ersetzen, für die meisten komplexen Fälle wird jedoch empfohlen, eine dedizierte Zustandsverwaltungsschicht zu verwenden. Beispiel: Vuex.

Upgrade-Methode

Führen Sie das Migrationstool ausFinden Sie die Instanzen mit $dispatch und <🎜 heraus > . $broadcast


Filter



Einfügen Filter außerhalb von Text Entfernt

Filter können jetzt nur innerhalb eingefügter Texte ({{ }}-Tags) verwendet werden. Wir haben festgestellt, dass die Verwendung von Filtern innerhalb von Anweisungen (z. B. v-model, v-on usw.) die Dinge komplizierter macht. Für Listenfilter wie v-for ist es am besten, die Verarbeitungslogik als berechnete Eigenschaft in js einzufügen, damit sie in der gesamten Vorlage wiederverwendet werden kann.

Kurz gesagt, für Dinge, die in nativem JS implementiert werden können, versuchen wir zu vermeiden, ein neues Symbol einzuführen, um wiederholt dasselbe Problem zu lösen. So ersetzen Sie die integrierten Filter von Vue:


Ersetzen Sie den debounce-Filter

, der nicht mehr so ​​ist

// Todos
// ...
created: function () {
  eventHub.$on('add-todo', this.addTodo)
  eventHub.$on('delete-todo', this.deleteTodo)
},
// 最好在组件销毁前
// 清除事件监听
beforeDestroy: function () {
  eventHub.$off('add-todo', this.addTodo)
  eventHub.$off('delete-todo', this.deleteTodo)
},
methods: {
  addTodo: function (newTodo) {
    this.todos.push(newTodo)
  },
  deleteTodo: function (todoId) {
    this.todos = this.todos.filter(function (todo) {
      return todo.id !== todoId
    })
  }
}
<input v-on:keyup="doStuff | debounce 500">

Bitte verwenden Sie Lodashs debounce (oder möglicherweise throttle) zur direkten Steuerung hochintensiver Aufgaben. Sie können die obige Funktion wie folgt implementieren:

methods: {
  doStuff: function () {
    // ...
  }
}
rrree

Weitere Vorteile dieser Schreibmethode finden Sie unter: v-modelBeispiel.


ersetzt den limitBy-Filter

nicht mehr so:

<input v-on:keyup="doStuff">

wird in der Berechnung verwendet Attribut js integrierte Methode: .slice Methode:

methods: {
  doStuff: _.debounce(function () {
    // ...
  }, 500)
}
<p v-for="item in items | limitBy 10">{{ item }}</p>


ersetzt den filterByFilter

nicht mehr so:

<p v-for="item in filteredItems">{{ item }}</p>

Verwenden Sie integrierte js-Methoden in berechneten Attributen .filterMethode:

computed: {
  filteredItems: function () {
    return this.items.slice(0, 10)
  }
}
<p v-for="user in users | filterBy searchQuery in 'name'">{{ user.name }}</p>

js native .filter kann auch viele komplexe Filteroperationen implementieren, da alle js-Methoden in berechneten Eigenschaften verwendet werden können. Um beispielsweise Benutzer zu finden, indem ihre Namen und E-Mail-Adressen abgeglichen werden (Groß- und Kleinschreibung wird nicht beachtet):

<p v-for="user in filteredUsers">{{ user.name }}</p>


Filter orderBy ersetzen

Schreiben Sie nicht so:

computed: {
  filteredUsers: function () {
    var self = this
    return self.users.filter(function (user) {
      return user.name.indexOf(self.searchQuery) !== -1
    })
  }
}

Verwenden Sie es stattdessen im berechneten Attribut lodashs orderBy (oder vielleicht sortBy):

var self = this
self.users.filter(function (user) {
  var searchRegex = new RegExp(self.searchQuery, 'i')
  return user.isActive && (
    searchRegex.test(user.name) ||
    searchRegex.test(user.email)
  )
})
<p v-for="user in users | orderBy 'name'">{{ user.name }}</p>

Sie können sogar nach Feld sortieren:

<p v-for="user in orderedUsers">{{ user.name }}</p>

Upgrade-Methode

Führen Sie das Migrationstool aus, um den in der Direktive verwendeten Filter zu finden. Wenn einige nicht gefunden werden, sehen Sie sich die Konsolenfehlermeldung an.


Filterparameter-NotationGeändert

Das Filterparameterformular funktioniert jetzt besser mit js Funktionsaufrufe erfolgen auf die gleiche Weise, daher werden Argumente nicht mehr durch Leerzeichen getrennt:

computed: {
  orderedUsers: function () {
    return _.orderBy(this.users, 'name')
  }
}

werden jetzt in Klammern eingeschlossen und durch Kommas getrennt:

_.orderBy(this.users, ['name', 'last_login'], ['asc', 'desc'])

Upgrade-Methode

Führen Sie das Migrationstool aus, um die alten Anrufsymbole zu finden, sehen Sie sich bitte das an Konsolenfehlermeldung.


Eingebauter Textfilter Entfernt

Der im Text eingefügte Filter bleibt jedoch bestehen Funktioniert, aber alle eingebauten Filter wurden entfernt. Stattdessen wird empfohlen, für jeden Bereich spezialisiertere Bibliotheken zu verwenden. (Verwenden Sie beispielsweise date-fns zum Formatieren des Datums und accounting zum Formatieren der Währung).

Für jeden eingebauten Filter fassen wir grob zusammen, wie man ihn austauscht. Codebeispiele können in benutzerdefinierten Hilfsfunktionen, Methoden oder berechneten Eigenschaften geschrieben werden.


json Filter ersetzen

Es besteht keine Notwendigkeit, sie einzeln zu ändern, da Vue sie automatisch formatiert hat Sie, egal ob es sich um eine Zeichenfolge, eine Zahl, ein Array oder ein Objekt handelt. Wenn Sie die Funktion JSON.stringify von js zur Implementierung verwenden möchten, können Sie sie auch in eine Methode oder ein berechnetes Attribut schreiben.


ersetzt capitalize Filter

<p>{{ date | formatDate 'YY-MM-DD' timeZone }}</p>


ersetzt uppercase filter

<p>{{ date | formatDate('YY-MM-DD', timeZone) }}</p>


ersetztlowercase filter

text[0].toUpperCase() + text.slice(1)


Ersetzenpluralize Filter

Die pluralize-Bibliothek auf NPM kann diese Funktion sehr gut implementieren. Wenn Sie nur bestimmte Wörter pluralisieren oder eine bestimmte Ausgabe für einen bestimmten Wert ('0') festlegen möchten, können Sie den Pluralformatierungsfilter auch einfach anpassen:

text.toUpperCase()


Ersetzen des currency Filtern

Für einfache Probleme können Sie Folgendes tun:

text.toLowerCase()

In den meisten Fällen wird es immer noch seltsame Phänomene geben (z. B. 0.035.toFixed(2) Aufrunden, um 0.04 zu erhalten, aber 0.045 Selbst wenn Sie nach unten wählen, erhalten Sie immer noch 0.04). Um diese Probleme zu lösen, können Sie die Bibliothek accounting verwenden, um eine zuverlässigere Währungsformatierung zu erreichen.

Upgrade-Methode

Führen Sie das Migrationstool aus, um die verworfenen Filter zu finden. Wenn etwas fehlt, lesen Sie bitte die Konsolenfehlermeldung.


Bidirektionaler Filter ersetzt

Einige Benutzer nutzen Bidirektional bereits gerne über v-model Filter zum Erstellen interessanter Eingaben mit sehr wenig Code. Obwohl bidirektionale Filter oberflächlich betrachtet einfach sind, können sie einige enorme Komplexitäten verbergen – sie können sogar dazu führen, dass Statusaktualisierungen langsam erfolgen und das Benutzererlebnis beeinträchtigt werden. Es wird empfohlen, stattdessen eine Komponente zu verwenden, die eine Eingabe umschließt, sodass Sie benutzerdefinierte Eingaben expliziter und funktionsreicher erstellen können.

Lass uns jetzt zur Demonstration eine bidirektionale Wechselkursfiltermigration durchführen:

Es funktioniert grundsätzlich gut, aber die verzögerten Statusaktualisierungen verursachen seltsames Verhalten. Klicken Sie beispielsweise auf das Tag Result und versuchen Sie, 9.999 in eines der Eingabefelder einzugeben. Wenn das Eingabefeld den Fokus verliert, wird sein Wert auf .00 aktualisiert. Wenn wir uns jedoch den gesamten Rechner ansehen, werden Sie feststellen, dass die gespeicherten Daten 9.999 sind. Was Benutzer sehen, ist keine echte Synchronisierung mehr!

Um zu einer robusteren Vue 2.0-Lösung zu wechseln, packen wir diesen Filter zunächst in eine neue <currency-input> Komponente:

Es ermöglicht uns um Verhaltensweisen hinzuzufügen, die nicht durch unabhängige Filter gekapselt werden können, z. B. die Auswahl des Inhalts des Eingabefeldfokus. Als nächstes extrahieren wir die Geschäftslogik aus dem Filter. Als nächstes legen wir alles in ein externes currencyValidatorObjekt :

Dies wird modularer sein, nicht nur einfacher zu Vue migrieren 2. Ermöglicht auch Ratenlücken und Formatierungen:

  • Getrennt von Ihrem Vue-Code für Unit-Tests

  • in Ihrer Anwendung Wird in anderen Teilen von verwendet des Programms, z. B. die Überprüfung einer API End Load

Nachdem wir diesen Validator extrahiert haben, können wir ihn auch bequemer in eine robustere Lösung einbauen. Diese seltsamen Zustände werden ebenfalls eliminiert, und es ist nicht mehr wahrscheinlich, dass Benutzer Fehler machen, genau wie das native Zahleneingabefeld des Browsers.

Allerdings sind wir bei den Filtern von Vue 1.0 immer noch eingeschränkt, daher ist es besser, komplett auf Vue 2.0 zu aktualisieren:

You You ist vielleicht aufgefallen:

  • Jeder Aspekt unseres Eingabefelds ist expliziter und verwendet Lebenszyklus-Hooks und DOM-Ereignisse, um das versteckte Verhalten bidirektionaler Filter zu ersetzen.

  • Wir können v-model jetzt direkt im benutzerdefinierten Eingabefeld verwenden. Es wird nicht nur mit dem normalen Eingabefeld verwendet, sondern bedeutet auch, dass unsere Komponente Vuex-freundlich ist.

  • Da wir keine Filteroptionen mehr benötigen, um einen Rückgabewert zu haben, kann unsere Wechselkursarbeit tatsächlich asynchron durchgeführt werden. Das heißt, wenn wir viele Anwendungen haben, die sich mit Wechselkursen befassen, können wir diese Logik leicht verfeinern und daraus einen gemeinsamen Mikroservice machen.

Upgrade-Methode

Führen Sie das Migrationstool aus, das z. B. in <🎜 zu finden ist > Beispiele für die Verwendung von Filtern in Anweisungen. Wenn Sie es verpassen, sollten Sie einen v-modelBefehlszeilenfehler erhalten.


Slots



Slot mit demselben Namen Entfernen

Doppelte Namen in derselben Vorlage

ist veraltet. Sobald ein Slot gerendert wurde, kann er an keiner anderen Stelle in derselben Vorlage erneut gerendert werden. Wenn Sie denselben Inhalt an verschiedenen Orten rendern möchten, können Sie ihn mit prop übergeben. <slot>

Upgrade-Methode

Führen Sie den Test nach dem Update aus und überprüfen Sie die

Konsolenwarnmeldung über Slots mit gleichnamige Tipps . v-model


slotSlot Stilparameter Entfernen

<slot>slotFragmente, die über benanntes eingefügt wurden, behalten nicht mehr die Parameter von bei. Bitte verwenden Sie ein Umhüllungselement, um das Styling zu steuern. Oder wählen Sie einen fortgeschritteneren Ansatz: Inhalte programmgesteuert ändern:

Renderfunktionen
.

Upgrade-Methode

Führen Sie das [slot="my-slot-name"]Migrationstool aus

Suchen Sie den CSS-Selektor „Select Slots Tag“ (zum Beispiel:
). <🎜><🎜>


Besondere Eigenschaften



keep-alivekeep-alive Das Attribut ersetzt

keep-alive<transition>

, das kein spezielles Attribut mehr, sondern eine umschlossene Komponente ist, ähnlich zu <keep-alive>, wie zum Beispiel:

function pluralizeKnife (count) {
  if (count === 0) {
    return 'no knives'
  } else if (count === 1) {
    return '1 knife'
  } else {
    return count + 'knives'
  }
}
Dies kann in Unterkomponenten mit mehreren Zuständen verwendet werden

:<keep-alive>

'$' + price.toFixed(2)

Wenn

verschiedene Unterkomponenten enthält, sollte es jede Unterkomponente separat beeinflussen. Nicht nur die erste, sondern alle untergeordneten Komponenten werden ignoriert. <transition>

und

Achten Sie darauf, den Inhalt zu verpacken, wenn Sie ihn zusammen verwenden:

<keep-alive>
  <component v-bind:is="view"></component>
</keep-alive>

Upgrade-Methode

keep-aliveFühren Sie das Migrationstool

aus
Suchen Sie das Attribut

.

Interpolation berechnen


Berechnete Interpolation innerhalb von Attributen Entfernen

Die berechnete Interpolation innerhalb des Attributs kann nicht mehr verwendet werden:

<keep-alive>
  <todo-list v-if="todos.length > 0"></todo-list>
  <no-todos-gif v-else></no-todos-gif>
</keep-alive>

sollte als Inline-Ausdruck geschrieben werden:
<transition>
  <keep-alive>
    <component v-bind:is="view"></component>
  </keep-alive>
</transition>

oder berechnetes Attribut:

<button class="btn btn-{{ size }}"></button>
<button v-bind:class="'btn btn-' + size"></button>

Upgrade-Methode

Migration ausführen
Werkzeuge

Berechnete Interpolation innerhalb der Eigenschaft finden

HTML Berechnete Interpolation Entfernt

{{{ foo }}}v-htmlDie berechnete Interpolation von HTML () wurde entfernt und durch die

-Direktive

ersetzt.

Upgrade-Methode

Führen Sie das
Migrationstool<🎜> aus, um die HTML-Berechnungsinterpolation zu finden. <🎜><🎜>


EinzelbindungErsetzt

Einzelbindung ({{* foo }}) Wurde ersetzt durch die neue v-onceRichtlinie.

Upgrade-Methode

Führen Sie das Migrationstool aus, um den einzelnen Bindungsverwendungsort zu finden.


Antwort



vm.$watchvm.$watch geändert

vm.$watch

Über vm.$watch erstellte Beobachter werden jetzt aktiviert, wenn die Komponente gerendert wird. Dadurch können Sie den Status aktualisieren, bevor die Komponente gerendert wird, ohne unnötige Aktualisierungen vorzunehmen. Sie können beispielsweise den Wert der Komponente selbst aktualisieren, indem Sie Änderungen an den Requisiten der Komponente beobachten. updated

Wenn Sie zuvor nach Komponentenaktualisierungen über
mit dem DOM interagiert haben, können Sie dies jetzt über den Lifecycle-Hook

tun.

Upgrade-Methode

Führen Sie den Test aus. Wenn es Beobachter gibt, die von der alten Methode abhängen, werden fehlgeschlagene Tests angezeigt.

vm.$setvm.$set

vm.$setÄnderungVue.set

ist nur ein Alias ​​für .

Upgrade-Methode


Führen Sie das

Migrationstool aus

Veraltete Verwendung findenvm.$delete

vm.$delete

vm.$deleteVue.delete Änderung

ist jetzt nur noch:

Alias.

<🎜>Upgrade-Methode<🎜><🎜><🎜><🎜>Führen Sie das <🎜>Migrationstool aus<🎜>Veraltete Verwendung finden<🎜><🎜>


Array.prototype.$set Veraltet

Verwenden Sie Vue.set Anstelle der

Upgrade-Methode

führen Sie das Migrationstool aus, um das .$set auf dem Array zu finden . Wenn etwas fehlt, lesen Sie bitte die Konsolenfehlermeldung.


Array.prototype.$removeArray.prototype.$remove Entfernen

Array.prototype.splice

und ersetzen Sie es durch

, zum Beispiel:
<button v-bind:class="buttonClasses"></button>

Oder noch besser: Geben Sie der Entfernungsmethode direkt einen Index Parameter:

computed: {
  buttonClasses: function () {
    return 'btn btn-' + size
  }
}

Upgrade-Methode

.$removeFühren Sie das Migrationstool aus, um das

auf der zu finden Array. Wenn etwas fehlt, lesen Sie bitte die
Konsolenfehlermeldung

.

Vue.setVue.delete und auf Vue-Instanzen entfernen

Vue.setVue.delete $data

und
funktioniert auf der Instanz nicht mehr. Es ist jetzt obligatorisch, alle Antwortwerte der obersten Ebene in der Datenoption der Instanz zu deklarieren. Wenn Sie ein Instanzattribut oder einen Wert für die Instanz

löschen, setzen Sie ihn einfach auf null.

Upgrade-Methode

Vue.setFühren Sie das Vue.deleteMigrationstool aus, um oder

in zu finden Beispiel. Wenn etwas fehlt, lesen Sie bitte die
Konsolenfehlermeldung

.

vm.$dataErsetzen Entfernen

JETZT VERBOTEN Ersetzen die $data der Instanz. Dies schützt das Antwortsystem vor einigen Randfällen und macht den Komponentenstatus kontrollierbarer und vorhersehbarer (insbesondere bei Systemen mit Typprüfung).

Upgrade-Methode

vm.$dataFühren Sie das Migrationstool aus, um den Speicherort zu finden, an dem

überschrieben wird. Wenn etwas fehlt, lesen Sie bitte die
Warnmeldung der Konsole<🎜>. <🎜><🎜>


vm.$get Durch Entfernen von

können die Antwortdaten direkt abgerufen werden.

Upgrade-Methode

Führen Sie das Migrationstool aus, um den Speicherort von vm.$get zu ermitteln. Wenn etwas fehlt, lesen Sie bitte die Konsolenfehlermeldung.


rund um das DOM Instanzmethode von



vm.$appendTovm.$appendTo Entfernen

DOM verwenden Native Methode:

methods: {
  removeTodo: function (todo) {
    var index = this.todos.indexOf(todo)
    this.todos.splice(index, 1)
  }
}

Upgrade-Methode

vm.$appendToFühren Sie das Migrationstool aus, um den Speicherort von <🎜 zu finden >. Wenn etwas fehlt, lesen Sie bitte die

Konsolenfehlermeldung
.


vm.$beforevm.$before

Entfernen

DOM verwenden Native Methode:

methods: {
  removeTodo: function (index) {
    this.todos.splice(index, 1)
  }
}

Upgrade-Methode vm.$beforeFühren Sie das

Migrationstool
aus, um

zu finden. Wenn etwas fehlt, lesen Sie bitte die
Konsolenfehlermeldung

.

vm.$aftervm.$after

Entfernen

Native DOM-Methode verwenden:

myElement.appendChild(vm.$el)

if myElement Für den letzten Knoten kann es auch so geschrieben werden:

myElement.parentNode.insertBefore(vm.$el, myElement)
vm.$afterUpgrade-Methode

<🎜>Ausführen<🎜>Migrationstool<🎜 >Suchen < 🎜> Standort. Wenn etwas fehlt, lesen Sie bitte die <🎜>Konsolenfehlermeldung<🎜>. <🎜><🎜>


vm.$remove Entfernen

DOM verwenden Native Methode:

myElement.parentNode.insertBefore(vm.$el, myElement.nextSibling)

Upgrade-Methode

Führen Sie das Migrationstool aus, um vm.$remove zu finden. Wenn etwas fehlt, lesen Sie bitte die Konsolenfehlermeldung.


zugrunde liegende Instanzmethoden



vm.$evalvm.$eval Entfernen

Versuchen Sie, diese Funktion nicht zu verwenden und sind sich nicht sicher, wie Sie sie verwenden sollen. Weitere Informationen finden Sie im
Forum

.

Upgrade-Methode

vm.$evalFühren Sie das Migrationstool aus, um den Speicherort zu finden, an dem

verwendet wird. Wenn etwas fehlt, lesen Sie bitte die
Konsolenfehlermeldung

.

vm.$interpolatevm.$interpolate

Entfernen

Versuchen Sie, diese Funktion nicht zu verwenden und sind sich nicht sicher, wie Sie sie verwenden sollen. Weitere Informationen finden Sie im Forum.

Upgrade-Methodevm.$interpolate

Führen Sie das
Migrationstool

aus, um
zu finden. Wenn etwas fehlt, lesen Sie bitte die

Konsolenfehlermeldung

. vm.$log

vm.$log

Entfernt

Bitte verwenden Sie

Vue Devtools

für das beste Debugging-Erlebnis. vm.$log

Upgrade-Methode<🎜><🎜><🎜><🎜>Führen Sie das <🎜>Migrationstool <🎜> aus, um <🎜> zu finden. Wenn etwas fehlt, lesen Sie bitte die Fehlermeldung der Konsole. <🎜><🎜>


Instanz-DOM-Optionen



replace: falseersetzen: false Entfernen

replace: false

Jetzt ersetzen Komponenten immer diejenigen, an die sie gebunden sind bestimmte Elemente. Um das Verhalten von

zu imitieren, können Sie die Stammkomponente mit einem Element umschließen, das dem Element ähnelt, das sie ersetzt:
myElement.parentNode.appendChild(vm.$el)

oder eine Renderfunktion verwenden Nummer:

vm.$el.remove()

Upgrade-Methode

replace: falseAusführen

Migrationstool
Suchen

Standort verwendet.

Globale Konfiguration


Vue.config.debug Vue.config.debug

Entfernen

wird nicht mehr benötigt, da standardmäßig Warnmeldungen in der Stapelmeldung ausgegeben werden.

Upgrade-MethodeVue.config.debug

Führen Sie das
Migrationstool

aus, um den Ort zu finden, der

enthält. Vue.config.async

Vue.config.async

Entfernt

Asynchrone Vorgänge erfordern jetzt Unterstützung für die Rendering-Leistung. Vue.config.async

Upgrade-Methode


Führen Sie das Vue.config.delimitersMigrationstool aus, um Instanzen mit zu finden.

Vue.config.delimiters

ersetzt

durch die VorlagenoptionVue.config.delimiters. Dadurch wird vermieden, dass die Verwendung benutzerdefinierter Trennzeichen Auswirkungen auf Vorlagen von Drittanbietern hat.

<🎜><🎜><🎜>Upgrade-Methode<🎜><🎜><🎜><🎜>Führen Sie das <🎜>Migrationstool <🎜> aus, um Instanzen mit <🎜> zu finden. <🎜><🎜>


Vue.config.unsafeDelimiters Entfernen

HTML-Interpolationersetzt durch v-html.

Upgrade-Methode

Führen Sie das Migrationstool aus, um Vue.config.unsafeDelimiters zu finden. Das Hilfstool findet dann auch Instanzen der HTML-Einfügung, die durch „v-html“ ersetzt werden können.


Globale API



Mit el Die Vue.extend entfernte

el-Option wird in Vue.extend nicht mehr verwendet. Nur in Instanzerstellungsparametern verfügbar.

Upgrade-Methode

Führen Sie den Test nach dem Update aus und finden Sie in der Warnmeldung der Konsoledas Problem mit Vue.extend'sel.


Vue.elementDirectiveVue.elementDirective Entfernen

Durch Komponente ersetzen

Upgrade-Methode

Vue.elementDirectiveFühren Sie das

Migrationstool
aus, um die Instanz zu finden, die <🎜> enthält. <🎜><🎜>


Vue.partial Entfernt

Teile wurden entfernt und durch explizitere Daten ersetzt Fluss zwischen Komponenten – Requisiten. Sofern Sie keinen teilweise leistungskritischen Bereich verwenden, empfiehlt es sich, stattdessen einfach eine normale Komponente zu verwenden. Wenn Sie einen Teil von name dynamisch binden, können Sie dynamische Komponente verwenden.

Wenn Sie Teilkomponenten in leistungskritischen Teilen Ihrer Anwendung verwenden, sollten Sie ein Upgrade auf Funktionskomponenten durchführen. Sie müssen in reinen JS/JSX-Dateien vorliegen (nicht in .vue-Dateien) und zustands- und instanzlos sein, genau wie Teildateien. Dadurch wird das Rendern extrem schnell.

Ein Vorteil von Funktionskomponenten gegenüber Partialkomponenten besteht darin, dass sie dynamischer sein können, da sie Ihnen den Zugriff auf die volle Leistungsfähigkeit von JavaScript ermöglichen. Allerdings ist dies mit Kosten verbunden. Wenn Sie noch nie ein Framework für gerenderte Komponenten verwendet haben, kann es länger dauern, bis Sie es erlernt haben.

Upgrade-Methode

Führen Sie das Migrationstool ausSuchen Sie die Instanz, die Vue.partial

< enthält 🎜 >