Migration von Vue Router 0.7.x


Nur ​​Vue Router 2 ist mit Vue 2 kompatibel. Wenn Sie also Vue aktualisieren, müssen Sie auch Vue Router aktualisieren. Aus diesem Grund haben wir die Details des Migrationspfads in die Hauptdokumentation aufgenommen.
Ein vollständiges Tutorial zur Verwendung von Vue Router 2 finden Sie in der
Vue Router-Dokumentation.


Verzeichnis


Router Initialisierung



router.startrouter.start Ersatz

Es wird keine spezielle API mehr zum Initialisieren einer App mit Vue Router geben, was nicht mehr bedeutet:

router.start({
  template: '<router-view></router-view>'
}, '#app')

Sie müssen lediglich ein Routing-Attribut an Vue übergeben Beispiel:
new Vue({
  el: '#app',
  router: router,
  template: '<router-view></router-view>'
})

Oder, wenn Sie einen Laufzeit-Build verwenden (nur Laufzeit) Methode:

new Vue({
  el: '#app',
  router: router,
  render: h => h('router-view')
})

Upgrade-Methode

router.startFühren Sie

Migration Assistant
aus, um das Beispiel von

zu finden angerufen.


Route Definition


router.maprouter.map

ersetztroutes

Routen werden jetzt als

Optionen
-Array in der Router-Instanz definiert. Diese Routen:

router.map({
  '/foo': {
    component: Foo
  },
  '/bar': {
    component: Bar
  }
})
werden also auf diese Weise definiert:
var router = new VueRouter({
  routes: [
    { path: '/foo', component: Foo },
    { path: '/bar', component: Bar }
  ]
})
Da beim Durchlaufen von Objekten in verschiedenen Browsern nicht garantiert wird, dass dieselbe Eigenschaftsreihenfolge verwendet wird, kann die Syntax dieses Arrays mehr gewährleisten Mehrere vorhersehbare Routenanpassungen.

Upgrade-Methoderouter.map

<🎜>Führen Sie <🎜>Migration Assistant<🎜> aus, um das Beispiel zu finden, in dem <🎜> aufgerufen wurde. <🎜><🎜>


router.on Entfernen Sie

wenn Sie es beim Starten der App übergeben müssen Code generiert Routen, und Sie können dies tun, indem Sie Definitionen dynamisch an das Routen-Array übertragen. Zum Beispiel:

// 普通的路由
var routes = [
  // ...
]

// 动态生成的路由
marketingPages.forEach(function (page) {
  routes.push({
    path: '/marketing/' + page.slug
    component: {
      extends: MarketingComponent
      data: function () {
        return { page: page }
      }
    }
  })
})

var router = new Router({
  routes: routes
})

Wenn Sie nach der Instanziierung des Routers eine neue Route hinzufügen müssen, können Sie „router“ eingeben Ändern Sie die ursprüngliche Matching-Methode in eine Matching-Methode, die Ihre neu hinzugefügte Route einschließt:

router.match = createMatcher(
  [{
    path: '/my/new/path',
    component: MyComponent
  }].concat(router.options.routes)
)

Upgrade-Methode

Run Der Migrationsassistent findet das Beispiel, in dem router.on aufgerufen wird.


router.beforeEachrouter.beforeEach geändert

router.beforeEachnext

funktioniert jetzt asynchron und verwendet eine
-Funktion als drittes Argument.

router.beforeEach(function (transition) {
  if (transition.to.path === '/forbidden') {
    transition.abort()
  } else {
    transition.next()
  }
})
rrree

subRoutessubRoutes

Umbenennenchildren

Out of Vue Router Um die Konsistenz mit anderen Routing-Bibliotheken zu gewährleisten, benennen Sie sie in

Upgrade-MethodesubRoutes

um. Führen Sie die < aus 🎜>Migrationsassistent
, um ein Beispiel für die Option

zu finden.

router.redirectrouter.redirect

Ersatz

routes

wird jetzt durch eine Routendefinitionsoption ersetzt. Beispielsweise würden Sie Folgendes aktualisieren:

router.beforeEach(function (to, from, next) {
  if (to.path === '/forbidden') {
    next(false)
  } else {
    next()
  }
})
wie in der

-Konfiguration unten definiert:

router.redirect({
  '/tos': '/terms-of-service'
})
router.redirect

Upgrade-Methode
<🎜><🎜><🎜>Führen Sie <🎜>Migrationsassistent<🎜> aus, um das Beispiel zu finden, in dem <🎜> aufgerufen wurde. <🎜><🎜>


router.alias Ersetzen

Jetzt ist es Ihr Ort, um Alias-Operationen durchzuführen Eine Option in der Routendefinition. Beispielsweise müssen Sie Folgendes konfigurieren: routes

{
  path: '/tos',
  redirect: '/terms-of-service'
}

in Ihrer

-Definition wie folgt:

router.alias({
  '/manage': '/admin'
})

Wenn Sie mehrere Aliase verwenden müssen Operation: Sie können auch eine Array-Syntax verwenden, um Folgendes zu implementieren:

{
  path: '/admin',
  component: AdminPanel,
  alias: '/manage'
}

Upgrade-Methode

Run Migration Assistant Suchen Sie das Beispiel, in dem router.alias aufgerufen wird.


Beliebiges Routenattribut ersetzt

Jetzt beliebig Die Route Das Attribut muss im Geltungsbereich des neuen Metaattributs liegen, um Konflikte mit zukünftigen neuen Funktionen zu vermeiden. Wenn Sie es beispielsweise zuvor so definiert haben:

alias: ['/manage', '/administer', '/administrate']

, müssen Sie es jetzt aktualisieren auf:

'/admin': {
  component: AdminPanel,
  requiresAuth: true
}

Wenn Sie über eine Route auf eine Eigenschaft zugreifen, übergeben Sie weiterhin meta . Zum Beispiel:

{
  path: '/admin',
  component: AdminPanel,
  meta: {
    requiresAuth: true
  }
}

Upgrade-Methode

Führen Sie den Migrationsassistenten aus, um alle Routen zu finden, die nicht vorhanden sind Metafunktion Beispiel unter Domäne.


Abfrage-Array[]-Syntax in URLEntfernen

Bei der Übergabe des Arrays an den Abfrageparameter , lautet die URL-Syntax nicht mehr /foo?users[]=Tom&users[]=Jerry, sondern die neue Syntax /foo?users=Tom&users=Jerry, zu diesem Zeitpunkt ist $route.query.users immer noch ein Array, aber wenn die Abfrage nur einen Parameter enthält: /foo?users=Tom, weiß vue-router beim direkten Zugriff auf die Route nicht, dass der von uns erwartete Benutzer ein ist Array. Erwägen Sie daher, eine berechnete Eigenschaft hinzuzufügen und sie überall dort zu ersetzen, wo Sie $route.query.users verwenden:

if (route.meta.requiresAuth) {
  // ...
}


Routenübereinstimmungen


Routenabgleich wird jetzt verwendet path-to-regexp-Paket, das das Arbeiten flexibler als zuvor macht.


Ein oder mehrere benannte Parameter ändert die Syntax von

geringfügig, sodass /category/*tags als Beispiel auf /category/:tags aktualisiert werden sollte.

So aktualisieren Sie

Führen Sie den Migrationsassistenten aus, um Beispiele für veraltete Routing-Syntax zu finden.




v-link<router-link>-Direktive wurde durch eine neue

Komponenten-

-Direktive ersetzt Die Komponenten in Vue 2 sind vollständig. Dies bedeutet in jedem Fall, dass Sie, wenn Sie einen Link wie diesen haben:

export default {
  // ...
  computed: {
    // 此计算属性将始终是个数组
    users () {
      const users = this.$route.query.users
      return Array.isArray(users) ? users : [users]
    }
  }
}
<router-link>, ihn aktualisieren müssen auf: target="_blank"
<a v-link="'/about'">About</a>

HINWEIS:
unterstützt das

-Attribut nicht Wenn Sie einen neuen Tab öffnen möchten, müssen Sie das Tag <a> verwenden.

Upgrade-Methode

v-linkFühren Sie den

Migrationsassistenten
aus, um ein Beispiel für den Befehl <🎜> zu finden. <🎜><🎜>


v-link-active auch weil man in < angegeben ist 🎜> Tag auf Komponente <router-link> Das Attribut ist veraltet. Beispielsweise müssen Sie Folgendes aktualisieren:

<router-link to="/about">About</router-link>

auf Folgendes:

<li v-link-active>
  <a v-link="'/about'">About</a>
</li>

Das Tag wird zu einem echten Link (und kann den richtigen Sprung erhalten), ist jedoch aktiviert Die Klasse wird auf das äußere <a>-Tag angewendet. <li>

Upgrade-Methode

Ausführen

Migrationsassistent Habe ein Beispiel für die -Richtlinie gefunden v-link-active


Navigation programmieren



router.gorouter.go Änderungen

Um die Konsistenz mit der router.goHTML5 History API aufrechtzuerhalten, wurde als verwendet Rückwärts-/Vorwärtsnavigation router.push,

werden verwendet, um zu speziellen Seiten zu navigieren.

Upgrade-Methode

Führen Sie router.goMigration Assistantrouter.push aus und finden Sie die Befehle

und
werden Beispiel genannt. <🎜><🎜>


Routing: Modi



hashbang: falseHashbang: false Entfernen

Hashbangs werden nicht mehr von Google gecrawlt, eine URL, Daher werden sie nicht länger die Standardoption für Hashing-Strategien sein.

Upgrade-Methode

hashbang: falseFühren Sie den

Migrationsassistenten
aus, um ein Beispiel für die Option

zu finden.

history: trueVerlauf: wahr

Ersetztmode

Alle Routenmodelloptionen werden in einer einzigen

Option vereinfacht. Sie müssen Folgendes aktualisieren:

<router-link tag="li" to="/about">
  <a>About</a>
</router-link>
auf diese Weise:
var router = new VueRouter({
  history: 'true'
})

Upgrade-Methodehistory: true

Ausführen
Migration Helper

findet ein Beispiel für die Option

. abstract: true

Zusammenfassung: wahr

mode

Ersetzt

Alle Routing-Modelloptionen werden in einer einzigen Option vereinfacht. Sie müssen Folgendes aktualisieren:

var router = new VueRouter({
  mode: 'history'
})

auf diese Weise:

var router = new VueRouter({
  abstract: 'true'
})
abstract: true

Upgrade-Methode<🎜><🎜><🎜><🎜>Ausführen <🎜> Migration Helper <🎜> findet ein Beispiel für die Option <🎜>. <🎜><🎜>


Routenoptionen: Sonstiges



saveScrollPositionsaveScrollPosition Ersatz

scrollBehavior Es wurde durch die

Option

ersetzt, die eine Funktion übernimmt, sodass das Gleitverhalten vollständig sein kann Anpassung – Auch eine individuelle Anpassung für jede Route ist möglich. Dies wird viele neue Möglichkeiten eröffnen, aber um das alte Verhalten einfach zu kopieren:
var router = new VueRouter({
  mode: 'abstract'
})

können Sie es ersetzen durch:

saveScrollPosition: true

So aktualisieren Sie

saveScrollPosition: trueFühren Sie den

Migrationsassistenten
aus, um ein Beispiel für die Option

zu finden.

rootroot

Umbenannt<base>base

Um die Konsistenz mit dem

HTML -Tag zu wahren, wurde in umbenannt.

Upgrade-Methoderoot

Führen Sie den
Migrationsassistenten

aus, um ein Beispiel für die Option

zu finden. transitionOnLoad

transitionOnLoad

appear

Entfernen

Aufgrund des Vue-Übergangssystems

Übergangskontrolle

wird diese Option nicht mehr benötigt. transitionOnLoad: true

Upgrade-Methode<🎜><🎜><🎜><🎜>Führen Sie den <🎜>Migrationsassistenten<🎜> aus, um ein Beispiel für die Option <🎜> zu finden. <🎜><🎜>


suppressTransitionError Entfernt

wurde entfernt, um den Haken zu vereinfachen. Wenn Sie Übergangsfehler wirklich unterdrücken müssen, können Sie stattdessen trycatch verwenden.

Upgrade-Methode

Führen Sie den Migrationsassistenten aus, um ein Beispiel für die Option suppressTransitionError: true zu finden.


Routenhaken



activateaktivieren Ersetzen

beforeRouteEnterVerwenden Sie

, um diese Komponente zu ersetzen.

Upgrade-Methode

activateFühren Sie den

Migrationsassistenten
aus, um ein Beispiel für den

-Hook zu finden.

canActivatecanActivate

Ersetzen beforeEnter

Verwenden Sie als Ersatz im Routing.

Upgrade-MethodecanActivate

<🎜>Führen Sie den <🎜>Migrationsassistenten<🎜> aus, um ein Beispiel für den <🎜>-Hook zu finden. <🎜><🎜>


deactivate Entfernen

Verwenden beforeDestroy Oder destroyed Haken als Alternative.

Upgrade-Methode

Führen Sie den Migrationsassistenten aus, um ein Beispiel für den deactivate-Hook zu finden.


canDeactivatecanDeactivate Ersetzen

beforeRouteLeave Verwenden Sie

als Ersatz in einer Komponente.

Upgrade-Methode

canDeactivateFühren Sie den

Migrationsassistenten
aus, um ein Beispiel für den

-Hook zu finden.

canReuse: falsecanReuse: false

Entfernt

wird in neuen Vue-Routen nicht mehr verwendet.

Upgrade-MethodecanReuse: false

Führen Sie den
Migrationsassistenten

aus, um ein Beispiel für die Option

zu finden. data

Daten

$route

ersetzt

-Eigenschaft ist reaktiv, Sie können also einfach einen Beobachter verwenden Um auf Routing-Änderungen zu reagieren, gehen Sie wie folgt vor:

scrollBehavior: function (to, from, savedPosition) {
  return savedPosition || { x: 0, y: 0 }
}
data

Upgrade-Methode<🎜><🎜><🎜><🎜>Run <🎜>Migration Assistant<🎜>Gefunden < 🎜> Beispiel für einen Haken. <🎜><🎜>


$loadingRouteData Entfernen

Definieren Sie Ihre eigenen Eigenschaften (zum Beispiel: isLoading) und aktualisieren Sie dann den Ladestatus im Watcher auf der Route. Wenn Sie beispielsweise axios verwenden, um Daten abzurufen:

watch: {
  '$route': 'fetchData'
},
methods: {
  fetchData: function () {
    // ...
  }
}