So verwenden Sie vue3+TypeScript+vue-router

So verwenden Sie vue3+TypeScript+vue-router

Einfach zu bedienen

Erstellen eines Projekts

vue-cli erstellen

 $npm install -g @vue/cli
$vue --version
@vue/cli 4.5.15
$vue erstelle mein Projekt

Dann die Schritte:

  1. Bitte wählen Sie eine Voreinstellung
    Wählen Sie „Features manuell auswählen“
  2. Überprüfen Sie die für Ihr Projekt erforderlichen Funktionen
    Wählen Sie TypeScript aus. Achten Sie besonders auf die Leertaste zum Auswählen und die Eingabetaste zum Fortfahren.
  3. Wählen Sie eine Version von Vue.js, mit der Sie das Projekt starten möchten
    Select 3.x (Vorschau)
  4. Verwenden Sie eine Komponentensyntax im Klassenstil
    Direkt einsteigen
  5. Verwenden Sie Babel zusammen mit TypeScript
    Direkt einsteigen
  6. Wählen Sie eine Linter-/Formatierungskonfiguration
    Direkt einsteigen
  7. Verlaufsmodus für Router verwenden?
    Direkt einsteigen
  8. Wählen Sie eine Linter-/Formatierungskonfiguration
    Direkt einsteigen
  9. Wählen Sie zusätzliche Lint-Funktionen
    Direkt einsteigen
  10. Wo platzieren Sie die Konfiguration für Babel, ESLint usw. am liebsten?
    Direkt einsteigen
  11. Dies als Vorgabe für zukünftige Projekte speichern?
    Direkt einsteigen

Dateistruktur:

 mein-projekt
+--- babel.config.js
+--- Paketsperre.json
+--- Paket.json
+--- öffentlich
| +--- favicon.ico
| +--- index.html
+--- README.md
+--- Quelle
| +--- App.vue
| +--- Vermögenswerte
| | +--- logo.png
| +--- Komponenten
| | +--- HalloWelt.vue
| +--- main.ts
| +--- shims-vue.d.ts
+--- tsconfig.json
+--- Knotenmodule
| +--- ...

Die Eintragsdatei ist src/main.ts

Vite-Erstellung

Führen Sie den folgenden Befehl aus, um ein Projekt zu erstellen

 $npm init vite-app <Projektname>
$cd <Projektname>
$ npm installieren
$ npm ausführen dev

Dateistruktur:

 Projektname
+--- übersicht.html
+--- Paketsperre.json
+--- Paket.json
+--- öffentlich
| +--- favicon.ico
+--- Quelle
| +--- App.vue
| +--- Vermögenswerte
| | +--- logo.png
| +--- Komponenten
| | +--- HalloWelt.vue
| +--- index.css
| +--- main.js
+--- Knotenmodule
| +--- ...

Die Eintragsdatei ist src/main.ts

Hinweis: Da das mit der Vite-Methode erstellte Projekt keine Vue-Deklarationsdatei hat, müssen wir es anpassen, da sonst ein Fehler gemeldet wird.
src/shims-vue.d.ts

 /* eslint-deaktivieren */
Deklariere das Modul '*.vue' {
  Importtyp {DefineComponent} von 'vue'
  Konstante Komponente: DefineComponent<{}, {}, any>
  Standardkomponente exportieren
}

Installieren Sie vue-router

 $ npm installiere vue-router@4

An diesem Punkt sieht package.json wie folgt aus:

 {
  "Name": "mein-Projekt",
  "version": "0.1.0",
  "privat": wahr,
  "Skripte": {
    "dienen": "vue-cli-service dienen",
    "Build": "Vue-CLI-Service-Build",
    "Fussel": "Vue-CLI-Service-Fussel"
  },
  "Abhängigkeiten": {
    "core-js": "^3.6.5",
    "vue": "^3.0.0",
    "vue-router": "^4.0.12"
  },
  "devAbhängigkeiten": {
    "@typescript-eslint/eslint-plugin": "^4.18.0",
    "@typescript-eslint/parser": "^4.18.0",
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-plugin-typescript": "~4.5.0",
    "@vue/cli-service": "~4.5.0",
    "@vue/compiler-sfc": "^3.0.0",
    "@vue/eslint-config-typescript": "^7.0.0",
    "eslint": "^6.7.2",
    "eslint-plugin-vue": "^7.0.0",
    "Typoskript": "~4.1.5"
  }
}

Komponenten erstellen/ändern

Erstellen Sie src/router/index.ts

 importiere { createRouter, createWebHashHistory } von "vue-router"
 
Home aus '../components/Home.vue' importieren
importiere About aus '../components/About.vue'
Benutzer aus '../components/User.vue' importieren
 
const Routen = [
	// Einzelheiten zu den Router-Parametern finden Sie weiter unten {
		Pfad: "/home",
		Name: "Heim",
		Komponente: Startseite
	},
	{
		Pfad: "/about",
		Name: "Über",
		Komponente: Über
	},
	{
		Pfad: "/user/:uid", // dynamischer Parametername: "user",
		Komponente: Benutzer
	}
]
exportiere const router = createRouter({
	Verlauf: createWebHashHistory(),
	Routen: Routen
})

Komponenten erstellen: Home.vue About.vue User.vue

src/components/Home.vue

 <Vorlage>
  <div>Home-Komponente</div>
</Vorlage>
 
<script lang="ts">
importiere { defineComponent } von "vue";
 
exportiere StandarddefiniereKomponente({
  Name: "Home",
  aufstellen() {
	zurückkehren {
	  //Zurückgegebene Daten };
  },
});
</Skript>

src/components/About.vue

 <Vorlage>
  <div>Über die Komponente</div>
</Vorlage>
 
<script lang="ts">
importiere { defineComponent } von "vue";
 
exportiere StandarddefiniereKomponente({
  Name: "Über",
  aufstellen() {
	zurückkehren {
	  //Zurückgegebene Daten };
  },
});
</Skript>

src/components/User.vue

 <Vorlage>
  <div>Benutzerkomponente</div>
</Vorlage>
 
<script lang="ts">
importiere { defineComponent } von "vue";
 
exportiere StandarddefiniereKomponente({
  Name: "Benutzer",
  aufstellen() {
	zurückkehren {
	  //Zurückgegebene Daten };
  },
});
</Skript>

App.vue ändern

 <Vorlage>
  <div>{{ AppMessage }}</div>
  <!-- Router-Link wird als Tag gerendert-->
  <router-link to="/home">Zuhause</router-link>
  <router-link to="/about">über</router-link>
  <router-link to="/user/lczmx">Benutzer</router-link>
 
  <!-- Routing-Ausgang -->
  <!-- Komponenten, die mit der Route übereinstimmen, werden hier gerendert-->
  <Router-Ansicht></Router-Ansicht>
</Vorlage>
 
<script lang="ts">
importiere { defineComponent } von "vue";
 
exportiere StandarddefiniereKomponente({
  Name: "App",
  aufstellen() {
	const appMessage = "App-Komponente";
	zurückkehren {
	  //Zurückgegebene Daten appMessage,
	};
  },
});
</Skript>
<Stil>
/* Stile hinzufügen */
#app {
  Textausrichtung: zentriert;
  Rand oben: 50px;
}
A {
  Rand: 30px;
  Anzeige: Inline-Block;
}
</Stil>

Ändern Sie den Eintrag ts

Ändern Sie src/main.ts :

 importiere { createApp } von 'vue'
App aus „./App.vue“ importieren
importiere './index.css'
 
importiere { router } von './router'
 
//Erstelle eine Anwendung und gib das entsprechende Instanzobjekt zurück const app = createApp(App)
 
// Vue-Router-Plugin installieren app.use(router)
// Rufen Sie die Mount-Methode app.mount('#app') auf.

Starten Sie Vue

 $ npm ausführen serve

> [email protected] dienen
> vue-cli-service dienen 

 INFO: Entwicklungsserver wird gestartet …
98% nach der Ausgabe von CopyPlugin

 FERTIG Erfolgreich kompiliert in 6387 ms, 16:14:30 Uhr

  App läuft unter:
  - Lokal: http://localhost:8080/
  - Netzwerk: http://192.168.43.12:8080/

  Beachten Sie, dass die Entwicklungsversion nicht optimiert ist.
  Führen Sie „npm run build“ aus, um einen Produktionsbuild zu erstellen.

Keine Probleme gefunden.

Zugriff im Browser

Besuchen Sie gemäß der Eingabeaufforderung http://localhost:8080/ , wie unten gezeigt

Dateistrukturbild

Umfassende Nutzung

Dynamische Parameter

Angenommen, wir benötigen die Routen /user/lczmx und /user/jack , aber wir können offensichtlich nicht zwei verschiedene Komponenten für diese beiden Routen definieren. Am besten verwenden wir dynamische Parameter:

 const Routen = [
  // Dynamische Segmente beginnen mit einem Doppelpunkt { path: '/users/:id', component: User },
  //Verwende den regulären Ausdruck `()` Der Inhalt wird an den vorherigen pathMatch übergeben
  // Wert unter route.params.pathMatch { Pfad: '/:pathMatch(.*)*', Name: 'NotFound', Komponente: NotFound },
]

Beim Abgleich werden die Parameter currentRoute.value.params router zugeordnet.

Hinweis in vue2: Da this.$route und this.$router nicht im setup verwendet werden können
Informationen dazu, wie Sie es erhalten, finden Sie in meinem anderen Blog: „Vue3 ruft die aktuelle Route ab“ und auf der offiziellen Website: „Vue Router und kombinierte API“

Übereinstimmungsliste

Passendes Muster Passender Pfad Parameter der aktuellen Route
/users/:username /users/eduardo { username: 'eduardo' }
/users/:username/posts/:postId /users/eduardo/posts/123 { username: 'eduardo', postId: '123' }

Wenn Sie Routen mit Parametern verwenden, beachten Sie Folgendes: Da dieselbe Komponenteninstanz wiederverwendet wird, werden die Komponenten-Lebenszyklus-Hooks nicht aufgerufen.

Aber wir können die Route überwachen

Verwenden Sie die Uhr, um dynamische Parameter zu überwachen

Ändern Sie src/components/User.vue :

 <Vorlage>
  <div>Benutzerkomponente</div>
  <p>Aktueller Benutzer: {{ uid }}</p>
 
  <router-link to="/Benutzer/lczmx">lczmx</router-link>
  <router-link to="/user/jack">Jack</router-link>
</Vorlage>
 
<script lang="ts">
importiere { defineComponent, watch, ref } von "vue";
importiere { useRouter } von "vue-router";
 
exportiere StandarddefiniereKomponente({
  Name: "Benutzer",
  aufstellen() {
    const router = useRouter();
    const uid = ref(router.currentRoute.value.params.uid);
    betrachten(
      // Auf nicht reagierende Daten warten() => router.currentRoute.value,
      (Wert) => {
        // UID ändern
        uid.Wert = val.params.uid;
      }
    );
    zurückkehren {
      // Zurückgegebene Daten-UID,
    };
  },
});
</Skript> 

Verwenden der Combination API zum Überwachen dynamischer Parameter

https://next.router.vuejs.org/en/guide/advanced/composition-api.html

Umleiten

Im Folgenden werden alle Parameter des router verwendet:

 const Routen = [
    {
        Weg: "/",
        // Methode 1: URL hartcodieren
        // Umleitung: "/home", // Umleitung zu "/home" beim Zugriff auf "/"
 
        // Methode 2: Springe zur entsprechenden benannten Routenumleitung: { name: "home" },
 
        //Schreibmethode 3 definiert eine Methode //Diese Methode kann auch einen relativen Pfad zurückgeben/*
        umleiten: zu => {
            // Die Methode erhält die Zielroute als Parameter „to“
 
            // umgeleiteten String-Pfad/Pfadobjekt zurückgeben			
			// Abfrage gibt Parameter an return { Pfad: '/home', Abfrage: { q: to.params.searchText } }
        },
        */
    },
    {
        Pfad: "/home",
        Name: "Heim",
        Komponente: Startseite
    }
]

Beachten Sie, dass Weiterleitungen keine Navigationsschutzmechanismen auslösen

Anbei ein Beispiel von der offiziellen Website: Named Views - Vue Router 4 examples

Benennung und Aliase

Benannte Routen

Geben Sie der Route einen Namen, der in anderen Routen verwendet werden kann, z. B. redirect und router-link

 const Routen = [
  {
    Pfad: '/user/:Benutzername',
    Name: "Benutzer",
    Komponente: Benutzer
  }
]

Die redirect wird wie oben beschrieben verwendet und router-link lautet wie folgt:

 <Vorlage>
  <div>Benutzerkomponente</div>
  <p>Aktueller Benutzer: {{ uid }}</p>
 
  <router-link :to="{ name: 'benutzer', params: { uid: 'lczmx' } }"
    >lczmx</router-link
  >
  <router-link :to="{ name: 'benutzer', params: { uid: 'jack' } }"
    >Buchse</Router-Link
  >
</Vorlage>

Verwendung in router.push ( router ist das router ):

 router.push({ Name: 'Benutzer', Parameter: { UID: 'lczmx' } })

Benannte Ansichten

Das heißt, wir können einen Namen router-view definieren, um den Effekt der Wiederverwendbarkeit zu erzielen. Wir können diese Funktion verwenden, um eine Seitenleiste usw. zu implementieren.

Zum Beispiel

Definieren Sie die Routen:

 importiere { createRouter, createWebHashHistory } von "vue-router"
 
Home aus '../components/Home.vue' importieren
importiere About aus '../components/About.vue'
Benutzer aus '../components/User.vue' importieren
 
const Routen = [
	{
		Weg: "/",
		Komponenten:
			default: Home, // standardmäßig wird die Home-Komponente verwendet a: About, // a wird die About-Komponente verwendet b: User, // b wird die User-Komponente verwendet },
 
	},
	{
		Pfad: "/home",
		Komponenten:
			default: About, // Benutze standardmäßig die About-Komponente a: Home, // a verwendet die Home-Komponente b: User, // b verwendet die User-Komponente },
 
	},
]
 
 
exportiere const router = createRouter({
	Verlauf: createWebHashHistory(),
	Routen: Routen
})

App.vue ändern

 <Vorlage>
  <div>{{ AppMessage }}</div>
 
  <!-- Router-Link wird als Tag gerendert-->
  <router-link zu="/">/</router-link>
  <router-link zu="/home">/home</router-link>
 
  <!-- Routing-Ausgang -->
  <!-- Komponenten, die mit der Route übereinstimmen, werden hier gerendert-->
  <!-- Standard -->
  <Router-Ansicht></Router-Ansicht>
  <router-view name="über"></router-view>
  <router-view name="Benutzer"></router-view>
</Vorlage>
 
<script lang="ts">
importiere { defineComponent } von "vue";
 
exportiere StandarddefiniereKomponente({
  Name: "App",
  aufstellen() {
	const appMessage = "App-Komponente";
	zurückkehren {
	  //Zurückgegebene Daten appMessage,
	};
  },
});
</Skript>
<Stil>
/* Stile hinzufügen */
#app {
  Textausrichtung: zentriert;
  Rand oben: 50px;
}
A {
  Rand: 30px;
  Anzeige: Inline-Block;
}
</Stil>

Andere Komponenten
About.vue :

 <Vorlage>
  <div>Über die Komponente</div>
</Vorlage>

Home.vue :

 <Vorlage>
  <div>Home-Komponente</div>
</Vorlage>

User.vue

 <Vorlage>
  <div>Benutzerkomponente</div>
</Vorlage>

Starten Sie den Dienst und greifen Sie auf Vue zu

Wie gezeigt:

Wenn Sie keinen Ansichtsnamen angeben, wird der default

Aliase

Es kann der Effekt erzielt werden, dass verschiedene URLs auf dieselbe Route zugreifen

 const Routen = [
    // Sie können auf "/home" oder "/" zugreifen.
    // und der Zugriffspfad wird sich nicht ändern{
        Pfad: "/home",
        Name: "Heim",
        Komponente: Home,
        Alias: "/"
    }

Verschachtelte Routen

Zuvor haben wir router-view in App.vue definiert, damit andere Komponenten dort rendern können

Wenn wir jedoch in anderen Komponenten rendern müssen, benötigen wir verschachteltes Routing

Verwenden Sie children Routen, deren Werte Routendaten sind, genau wie die externe router

Beispiel:

router.index.ts

 importiere { createRouter, createWebHashHistory } von "vue-router"
 
Home aus '../components/Home.vue' importieren
importiere About aus '../components/About.vue'
Benutzer aus '../components/User.vue' importieren
Importiere UserHome aus „../components/UserHome.vue“
Importiere Benutzereinstellungen aus „../components/UserSettings.vue“
Importiere UserProfile aus „../components/UserProfile.vue“
 
const Routen = [
	// Sie können auf "/home" oder "/" zugreifen.
	// und der Zugriffspfad wird sich nicht ändern {
		Pfad: "/home",
		Name: "Heim",
		Komponente: Home,
		Alias: "/"
	},
	{
		Pfad: "/about",
		Name: "Über",
		Komponente: Über
	},
	{
		Pfad: "/user/:uid", // dynamischer Parametername: "user",
		Komponente: Benutzer, // Router, die in Router-View-Rendering-Kindern verschachtelt sind: [
			// URLs wie /user/lczmx abgleichen
			{ Pfad: "", Komponente: UserHome },
 
			// URLs wie /user/lczmx/settings abgleichen
			{ Pfad: "Einstellungen", Komponente: Benutzereinstellungen, Name: "Benutzereinstellungen" },
 
			// URLs wie /user/lczmx/profile abgleichen
			{ Pfad: "Profil", Komponente: Benutzerprofil, Name: "Benutzerprofil" }
		]
	}
]
 
 
exportiere const router = createRouter({
	Verlauf: createWebHashHistory(),
	Routen: Routen
})

Hinweis: Wenn in children kein path: "" vorhanden ist, führt der Zugriff auf /user/lczmx nur zu einer leeren Seite.

User.vue

 <Vorlage>
  <div>
	<router-link :to="{ name: 'user-settings' }">Einstellungen</router-link>
	<router-link :to="{ name: 'user-profile' }">Profil</router-link>
  </div>
 
  <Router-Ansicht></Router-Ansicht>
</Vorlage>

UserHome.vue

 <Vorlage>
  <div>Benutzer-Homepage</div>
</Vorlage>

UserProfile.vue

 <Vorlage>
  <div>Seite mit Benutzerdetails</div>
</Vorlage>

UserSettings.vue

 <Vorlage>
  <div>Seite mit Benutzereinstellungen</div>
</Vorlage>

Starten und zugreifen

Test im Browser:

Programmatisches Routing

Das heißt, anstatt das a-Tag zu verwenden, wird die Route über js/ts geändert. Das Prinzip besteht darin, history Verlaufsstapel in vue3 einen neuen Datensatz hinzuzufügen. Es gibt folgende Möglichkeiten, ihn zu schreiben:

 <Vorlage>
  <div>Über die Komponente</div>
  <button @click="changeRouter">Route ändern</button>
</Vorlage>
 
 
<script lang="ts">
importiere { defineComponent } von "vue";
 
importiere { useRouter } von "vue-router";
 
exportiere StandarddefiniereKomponente({
  Name: "Über",
  aufstellen() {
    // Routerobjekt abrufen const router = useRouter();
 
    const changeRouter = () => {
      /* Beispiel für die Änderung von Routen */
 
      // 1 String-Pfad router.push("/users/lczmx");
 
      // 2 Objekt mit Pfad router.push({ path: "/users/lczmx" });
 
      // 3 benannte Routen und hinzugefügte Parameter, damit die Routen die URL erstellen können
      router.push({ Name: "Benutzer", Params: { Benutzername: "lczmx" } });
 
      // 4 mit Abfrageparametern ist das Ergebnis /register?plan=private
      router.push({ Pfad: "/register", Abfrage: { Plan: "privat" } });
 
      // 5 mit Hash, das Ergebnis ist /about#team
      router.push({ Pfad: "/about", Hash: "#team" });
 
      // 6 Wir können die URL manuell erstellen, müssen die Kodierung aber selbst handhaben. const username = "lczmx";
      router.push(`/Benutzer/${Benutzername}`); // -> /Benutzer/lczmx
      // Ähnlich router.push({ path: `/user/${username}` }); // -> /user/lczmx
      // Verwenden Sie nach Möglichkeit „name“ und „params“, um von der automatischen URL-Kodierung zu profitieren router.push({ name: "user", params: { username } }); // -> /user/lczmx
 
      // 7 `params` kann nicht mit `path` verwendet werden, sonst wird `params` ignoriert router.push({ path: "/user", params: { username } }); // -> /user
 
      // 8 replace ist wahr und fügt nichts zum Verlauf hinzu router.push({ path: "/home", replace: true });
      // Entspricht router.replace({ path: "/home" });
 
      // 9 Durch den Verlauf // Einen Datensatz vorwärts bewegen, dasselbe wie router.forward() router.go(1);
      //Gibt einen Datensatz zurück, dasselbe wie router.back() router.go(-1);
      // 3 Datensätze vorwärts gehen router.go(3);
      // Wenn nicht so viele Datensätze vorhanden sind, wird stillschweigend abgebrochen router.go(-100);
      router.go(100);
    };
    zurückkehren {
      //Zurückgegebene Daten changeRouter,
    };
  },
});
</Skript>
 
<Stil>
Taste {
  Rand: 30px;
}
</Stil>

Weitere Informationen finden Sie auf der offiziellen Website von vue-router4: Vue Router

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Vue3 + TypeScript-Entwicklungszusammenfassung
  • Praktischer Bericht über die Entwicklung von Vue3- und TypeScript-Projekten
  • Detailliertes Beispiel für die Verwendung von Typescript zum Einkapseln von Axios in Vue3
  • Vue3 TypeScript implementiert useRequest-Details

<<:  Eine kurze Diskussion über Browserkompatibilitätsprobleme in JavaScript

>>:  Detaillierte Erklärung der Verwendung und des Unterschieds zwischen relativ und absolut in HTML

Artikel empfehlen

Vue implementiert den Anwesenheitskalender von DingTalk

In diesem Artikel wird der spezifische Code von V...

Einige Frontend-Grundlagen (HTML, CSS) aus der Praxis

1. Die Div-CSS-Maushandform ist Cursor:Zeiger; 2. ...

HTML-Multimediaanwendung: Einfügen von Flash-Animationen und Musik in Webseiten

1. Anwendung von Multimedia in HTML_Flash-Animati...

Eine kurze Diskussion über die binäre Familie von JS

Inhaltsverzeichnis Überblick Klecks Blob in Aktio...

So ändern Sie das MySQL-Passwort unter Centos

1. MySQL-Anmeldeeinstellungen ändern: # vim /etc/...

Handbuch zur MySQL-Volltextindizierung

Die Volltextindizierung erfordert eine spezielle ...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.13

In diesem Artikel finden Sie das Installations- u...

...