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
Ersatzrouter.start
router.start
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')
})
zu finden angerufen.
Route Definition
router.map
router.map
ersetztroutes
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.
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.
geändertrouter.beforeEach
router.beforeEach
router.beforeEach
next
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
subRoutes
subRoutes
Out of Vue Router Um die Konsistenz mit anderen Routing-Bibliotheken zu gewährleisten, benennen Sie sie in
um. Führen Sie die < aus 🎜>Migrationsassistent
, um ein Beispiel für die Option
router.redirect
router.redirect
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
router.redirect({ '/tos': '/terms-of-service' })
router.redirect
Upgrade-Methoderouter.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.
Links
Die Replacementv-link
v-link
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:
-Attribut nicht Wenn Sie einen neuen Tab öffnen möchten, müssen Sie das Tag <a> verwenden.
Upgrade-MethodeMigrationsassistentenv-link-active
ersetzt
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.go
router.go
ÄnderungenUm die Konsistenz mit der router.go
HTML5 History API aufrechtzuerhalten, wurde als verwendet Rückwärts-/Vorwärtsnavigation router.push
,
Upgrade-Methode
Führen Sie router.go
Migration Assistantrouter.push
aus und finden Sie die Befehle
Routing: Modi
Entfernenhashbang: false
Hashbang: false
Hashbangs werden nicht mehr von Google gecrawlt, eine URL, Daher werden sie nicht länger die Standardoption für Hashing-Strategien sein.
Upgrade-MethodeMigrationsassistenten zu finden.
history: true
Verlauf: wahr
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' })
Ausführen
Migration Helper
. abstract: true
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
Routenoptionen: Sonstiges
ErsatzsaveScrollPosition
saveScrollPosition
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
zu finden.
root
root
Umbenannt<base>
base
Führen Sie den
Migrationsassistenten
zu finden. transitionOnLoad
Aufgrund des Vue-Übergangssystems
Übergangskontrolle wird diese Option nicht mehr benötigt. transitionOnLoad: true
suppressTransitionError
Entfernt
wurde entfernt, um den Haken zu vereinfachen. Wenn Sie Übergangsfehler wirklich unterdrücken müssen, können Sie stattdessen try
…catch
verwenden.
Upgrade-Methode
Führen Sie den Migrationsassistenten aus, um ein Beispiel für die Option suppressTransitionError: true
zu finden.
Routenhaken
Ersetzenactivate
aktivieren
beforeRouteEnter
Verwenden Sie
-Hook zu finden.
canActivate
canActivate
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.
Ersetzen canDeactivate
canDeactivate
beforeRouteLeave
Verwenden Sie
-Hook zu finden.
canReuse: false
canReuse: false
Entfernt
Führen Sie den
Migrationsassistenten
zu finden. data
$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
$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 () { // ... } }