Heim Web-Frontend js-Tutorial Der Vue-Router trennt alle Unterrouten in unabhängige Komponenten

Der Vue-Router trennt alle Unterrouten in unabhängige Komponenten

Apr 27, 2018 am 09:26 AM
router 分离 unabhängig

Dieses Mal bringe ich Ihnen einen Vue-Router, um alle Unterrouten in unabhängige Komponenten zu unterteilen. Was sind die Vorsichtsmaßnahmen für den Vue-Router, um alle Unterrouten in unabhängige Komponenten zu unterteilen? Werfen wir einmal einen Blick.

Dynamisches Routing des Vue-Routers

vue-router官网上面是这样说的
// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
然后,我就这样写了:
this.$router.push({path:'manage', query: {id: 'tasklist'}})1
结果很明显,失败了。然后我就默默的再次看了一下官网,结果发现了这句话
// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})
// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', params: { plan: 'private' }})
注意:如果提供了 path,params 会被忽略,上述例子中的 query 并不属于这种情况。取而代之的是下面例子的做法,你需要提供路由的 name 或手写完整的带有参数的 path:
const userId = 123
router.push({ name: 'user', params: { userId }}) // -> /user/123
router.push({ path: `/user/${userId}` }) // -> /user/123
// 这里的 params 不生效
router.push({ path: '/user', params: { userId }}) // -> /user
谨记啊,动态实现二级路由,需要先用变量保存二级路由名称(let router = 'tasklist'),然后调用this.$router.push({path: `/user/${router}`}).
Nach dem Login kopieren

Werfen wir einen Blick auf die Lösung, jede Unterroute zu einer unabhängigen Komponente unter dem dynamischen Routing des Vue-Routers zu machen

Da vue-router eine Komponentenwiederverwendungsstrategie für verschachteltes Routing anwendet, ist dies in den meisten Szenarien tatsächlich ein effizienter Ansatz, aber wenn Sie auf diese Situation stoßen:

besteht darin, die Koexistenz mehrerer Unterrouten zu erfordern. Wenn häufig hin und her gewechselt werden muss, ist es sehr wünschenswert, jede Unterroute zu einer unabhängigen Komponente zu machen, obwohl Sie durch Abhörrouten wechseln können

watch: {
   '$route'(to) {
    if (to.meta.path === '/page/buy-details') {
     this.id = to.params.id;
     this.state()
    }
   }
  },
Nach dem Login kopieren
Die Verarbeitung aktualisierter Daten in Echtzeit, einschließlich der Animationsseite oben, ist jedoch sehr mühsam, damit Benutzer vor dem Wechsel genau zum Anzeigestatus der Seite zurückkehren können Da es zu viele Dinge gab, habe ich eine Lösung gefunden:

Die Sub-Routing-Komponente beinhaltet keinen tatsächlichen Geschäftscode, sondern verwaltet nur eine Liste der geöffneten IDs Hier umgeschaltet, bestimmt es die IDs und diejenigen, die nicht geöffnet wurden. Fügen Sie die tatsächlichen Sub-Routing-Komponenten hinzu, schleifen Sie sie durch diese Liste und zeigen Sie die aktuelle ID an, sodass jede Instanz unabhängig sein kann.

Ich habe ein Mixins geschrieben Basierend auf dieser Idee

details -page.js

export default {
 watch: {
  '$route'(to, from) {
   this.detailsLeave(from);
   this.detailsOpen(to);
  }
 },
 data() {
  return {
   pagePath: '',
   pageId: 0,
   pages: {}
  }
 },
 methods: {
  /**
   * 子页面打开触发
   * @param route
   */
  detailsOpen(route) {
   if (this.detailsPathGet(route.path) === this.pagePath) {
    if (!this.pages[route.params.id]) {
     this.$set(this.pages, route.params.id, {
      id: route.params.id,
      scrollTop: 0
     })
    }
    //路由打开 跳转滚动条
    this.pageId = route.params.id;
    this.$nextTick(()=>{
     this.$parent.$el.firstChild.scrollTop = this.pages[route.params.id].scrollTop;
    });
   }
  },
  /**
   * 路由切换触发
   * 判断离开的路由是否是当前页面,如果是则记录滚动条高度
   * @param route
   */
  detailsLeave(route) {
   if (this.detailsPathGet(route.path) === this.pagePath) {
    if (this.pages[route.params.id]) {
     //记录滚动条高度 此处针对ea-admin后台 不同的框架要记录的滚动条el不同
     this.pages[route.params.id].scrollTop = this.$parent.$el.firstChild.scrollTop ;
    }
   }
  },
  /**
   * 子页面关闭函数
   * @param id
   */
  detailsClose(id) {
   delete this.pages[id]
  },
  /**
   * 取路由不含最后一项参数的地址
   * @param path
   * @returns {string}
   */
  detailsPathGet(path) {
   const i = path.lastIndexOf('/');
   return path.substr(0, i);
  }
 },
 mounted() {
  //通过当前路由地址创建页面识别地址 注:只对path: '/user/:id' 有效 当 path: /user/:id/profile 失效
  this.pagePath = this.detailsPathGet(this.$route.path);
  //执行第一次子页面打开
  this.detailsOpen(this.$route);
  //监听标签关闭消息 此处针对ea-admin后台 不同框架监听关闭方式不同
  this.$tabs.onRemove((page, next) => {
   //收到标签关闭回调,判断关闭的是否是当前页面
   if (page._path === this.pagePath) {
    //触发子页面删除
    this.detailsClose(page.id)
   }
   next()
  })
 }
}
Nach dem Login kopieren
Details.vue

<template>
 <p>
  <your-component
    v-for="item in pages"
    :id="item.id"
    :key="item.id"
    v-show="item.id === pageId">
  </your-component>
 </p>
</template>
<script>
 import YourComponent from '';
 import detailsPage from '../mixins/details-page'
 export default {
  name: 'DetailsPage',
  components: {YourComponent},
  mixins: [detailsPage],
 }
</script>
Nach dem Login kopieren
Auf diese Weise kann sich die Unterkomponente nur auf die Verarbeitung ihrer eigenen festen Daten konzentrieren. Da die Komponente eindeutig ist, besteht kein Grund zur Sorge, den Ansichtsstatus für jede ID zu speichern.

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

So passen Sie Bilder im WeChat-Applet an die Modellgröße an

vue.js Frontend und Back-End-Daten Detaillierte Erläuterung der Interaktionsschritte

Das obige ist der detaillierte Inhalt vonDer Vue-Router trennt alle Unterrouten in unabhängige Komponenten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

React Router-Benutzerhandbuch: So implementieren Sie die Front-End-Routing-Steuerung React Router-Benutzerhandbuch: So implementieren Sie die Front-End-Routing-Steuerung Sep 29, 2023 pm 05:45 PM

ReactRouter-Benutzerhandbuch: So implementieren Sie die Front-End-Routing-Steuerung Mit der Popularität von Single-Page-Anwendungen ist das Front-End-Routing zu einem wichtigen Bestandteil geworden, der nicht ignoriert werden kann. Als beliebteste Routing-Bibliothek im React-Ökosystem bietet ReactRouter umfangreiche Funktionen und benutzerfreundliche APIs, wodurch die Implementierung des Front-End-Routings sehr einfach und flexibel ist. In diesem Artikel wird die Verwendung von ReactRouter vorgestellt und einige spezifische Codebeispiele bereitgestellt. Um ReactRouter zuerst zu installieren, benötigen wir

So verwenden Sie das Modulsystem in Java 9 zum Trennen und Isolieren von Code So verwenden Sie das Modulsystem in Java 9 zum Trennen und Isolieren von Code Jul 30, 2023 pm 07:46 PM

So verwenden Sie das Modulsystem in Java 9 zum Trennen und Isolieren von Code. Da der Umfang der Software weiter zunimmt, nimmt auch die Komplexität des Codes weiter zu. Um Code besser zu organisieren und zu verwalten, führte Java9 das Modulsystem ein. Das Aufkommen des Modulsystems löst das Problem traditioneller Paketabhängigkeiten und macht die Trennung und Isolierung von Code einfacher und flexibler. In diesem Artikel wird erläutert, wie Sie mithilfe des Modulsystems in Java 9 eine Codetrennung und -isolierung erreichen. 1. Definition des Moduls In Java9 können wir zum Definieren das Schlüsselwort module verwenden

Vorschläge zur Front-End-Technologieauswahl bei der Golang-Front-End- und Back-End-Trennungsentwicklung. Vorschläge zur Front-End-Technologieauswahl bei der Golang-Front-End- und Back-End-Trennungsentwicklung. Mar 05, 2024 pm 12:12 PM

Titel: Vorschläge zur Auswahl der Front-End-Technologie in der Front-End- und Back-End-Trennungsentwicklung von Golang Da die Komplexität und Anforderungen von Webanwendungen weiter zunehmen, wird das Front-End- und Back-End-Trennungsentwicklungsmodell immer beliebter. In diesem Entwicklungsmodell ist das Backend für die Verarbeitung der Geschäftslogik verantwortlich, und das Frontend ist für die Anzeige von Seiten und die Interaktion mit Benutzern verantwortlich. Die beiden kommunizieren über APIs. Für Entwicklungsteams, die Golang als Back-End-Sprache verwenden, ist die Wahl der richtigen Front-End-Technologie von entscheidender Bedeutung. In diesem Artikel werden die empfohlenen Front-End-Technologien zur Auswahl bei der separaten Entwicklung von Front-End und Back-End in Golang erläutert

Die einzigartigen Vorteile des Lazy-Loading-Routings von Vue Router. Wie kann die Seitenleistung optimiert werden? Die einzigartigen Vorteile des Lazy-Loading-Routings von Vue Router. Wie kann die Seitenleistung optimiert werden? Sep 15, 2023 am 10:36 AM

VueRouter ist ein Routenverwaltungs-Plug-in, das offiziell von Vue.js bereitgestellt wird. Es kann uns bei der Implementierung von Seitennavigation und Routenumschaltung in Vue-Anwendungen helfen. Die Lazy-Loading-Funktion ist ein einzigartiger Vorteil von VueRouter, der die Seitenleistung erheblich optimieren kann. In diesem Artikel stellen wir die Lazy-Loading-Routing-Funktion von VueRouter vor und stellen einige praktische Codebeispiele zur Optimierung der Seitenleistung bereit. Lazy-Loading bedeutet bei Bedarf

Was soll ich tun, wenn der React-Router nicht angezeigt wird? Was soll ich tun, wenn der React-Router nicht angezeigt wird? Dec 30, 2022 am 09:30 AM

Lösung, um darauf zu reagieren, dass der Router nicht angezeigt wird: 1. BrowserRouter zur übergeordneten Routing-Komponente hinzufügen, um den Router zu umschließen. 2. Verwenden Sie „this.props.history.go()“, um die Komponente zu aktualisieren. 3. Fügen Sie „forcerefresh“ zum Browserrouter-Parameter hinzu ={true}“; 4. Schreiben Sie eine Hook-Funktion in „<Route>“ und rufen Sie sie auf, wenn Sie diese Route verlassen oder betreten.

Vue Router Lazy-Loading-Routing: ein Trend zur Verbesserung der Seitenleistung Vue Router Lazy-Loading-Routing: ein Trend zur Verbesserung der Seitenleistung Sep 15, 2023 am 08:03 AM

VueRouter ist der offizielle Routing-Manager im Vue.js-Framework. Es ermöglicht Entwicklern, Seiteninhalte durch Routenzuordnung zu wechseln, wodurch Einzelseitenanwendungen besser kontrollierbar und einfacher zu warten sind. Wenn Anwendungen jedoch komplexer werden, kann das Laden und Parsen von Routen zu einem Leistungsengpass werden. Um dieses Problem zu lösen, bietet VueRouter eine Funktion zum verzögerten Laden von Routen, die das Laden von Routen verzögert, bis es tatsächlich benötigt wird. Lazy-Loading ist eine Ladetechnologie, die

Unverzichtbar für PHP-Entwickler: Detaillierte Erläuterung der Implementierungsmethode der MySQL-Lese- und Schreibtrennung Unverzichtbar für PHP-Entwickler: Detaillierte Erläuterung der Implementierungsmethode der MySQL-Lese- und Schreibtrennung Mar 04, 2024 pm 04:36 PM

PHP-Entwickler sind während des Website-Entwicklungsprozesses häufig mit Datenbankoperationen konfrontiert. Als sehr beliebtes Datenbankverwaltungssystem ist die Lese-/Schreibtrennung von MySQL eines der wichtigsten Mittel zur Verbesserung der Website-Leistung. In der PHP-Entwicklung kann die Implementierung der MySQL-Lese-/Schreibtrennung die Möglichkeiten des gleichzeitigen Zugriffs und die Benutzererfahrung der Website erheblich verbessern. In diesem Artikel wird die Implementierungsmethode der MySQL-Lese-/Schreibtrennung ausführlich vorgestellt und spezifische PHP-Codebeispiele bereitgestellt, um PHP-Entwicklern dabei zu helfen, die Lese-/Schreibtrennungsfunktion besser zu verstehen und anzuwenden. Was ist MySQL lesen?

So verwenden Sie Router-Routing, um Sprungparameter in vue3 zu implementieren So verwenden Sie Router-Routing, um Sprungparameter in vue3 zu implementieren May 16, 2023 am 10:49 AM

1. Routensprung 1. Führen Sie zunächst die API ein – useRouterimport{useRouter}from'vue-router'2. Definieren Sie die Router-Variable auf der Sprungseite. // Definieren Sie zunächst constrouter=useRouter() im Setup. 3. Verwenden Sie router.push Zur Seite springen //String router.push('home')//Object router.push({path:'home'})//

See all articles