摘要:在上一章節(jié),通過新建項(xiàng)目之后,會(huì)自動(dòng)引入路由模塊,接下來需要做的事情就是對路由模塊進(jìn)行配置。為了方便維護(hù),多帶帶把路由模塊的配置拿出來,再去輸出到中。路由守衛(wèi)業(yè)務(wù)需求是在沒有登錄的情況下,是不允許跳入到下一個(gè)頁面的。
router
單頁面應(yīng)用通過路由來去渲染不同的視圖,為用戶在同一個(gè)頁面看到不同的場景,提供基礎(chǔ)服務(wù)。
在上一章節(jié),通過新建項(xiàng)目之后,ngModule會(huì)自動(dòng)引入路由模塊,接下來需要做的事情就是對路由模塊進(jìn)行配置。為了方便維護(hù),多帶帶把路由模塊的配置拿出來,再去輸出到ngModule中。
import {NgModule} from "@angular/core"; import {Routes, RouterModule} from "@angular/router"; import {LoginComponent} from "./core/login/login.component"; import {NotFoundComponent} from "./core/not-found/not-found.component"; import {Auth} from "./core/login/login.Auth"; const routes: Routes = [ {path: "login", component: LoginComponent}, {path: "stones", loadChildren: "./stones/stones.module#StonesModule", canActivate: [Auth]}, {path: "", redirectTo: "/login", pathMatch: "full"}, {path: "**", component: NotFoundComponent} ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule], providers: [Auth] }) export class AppRoutingModule { }
在app組件下,暫時(shí)只引了三個(gè)組件,一個(gè)是項(xiàng)目啟動(dòng)的默認(rèn)登錄頁面,一個(gè)是404頁面,另一個(gè)是stones組件,這個(gè)組件又會(huì)作為一個(gè)父級的路由容器來去管理他下面的頁面。
這樣做的理由是,為了在頁面多了之后方便管理,層級上面一定要分明,不能扁平化,所有的東西都一股腦的掛在app下面。通過引入stones路由,再讓stones路由去管理其他的子路由是一個(gè)不錯(cuò)的選擇。
項(xiàng)目結(jié)構(gòu)如下:
(ps:項(xiàng)目本身一直在寫,之后可能有所改變,但思路不變,不直接通過app根節(jié)點(diǎn)去管理)
在路由的具體的配置方面:
{path: "", redirectTo: "/login", pathMatch: "full"}
redirectTo表示在頁面路由為空時(shí)(一般是剛進(jìn)入項(xiàng)目),會(huì)重定向到login頁面。
{path: "**", component: NotFoundComponent}
路由是根據(jù)path自上而下匹配的,如果說瀏覽器中的地址上的路由變成一個(gè)不存在的值時(shí),那么會(huì)一直向下匹配,直到匹配到**,這個(gè)可以匹配任意路由的配置,這也是做404頁面的原理,因此一定要把**這個(gè)配置寫在最后一行。
{path: "stones", loadChildren: "./stones/stones.module#StonesModule", canActivate: [Auth]},路由守衛(wèi)
業(yè)務(wù)需求是在沒有登錄的情況下,是不允許跳入到下一個(gè)頁面的。這時(shí)路由守衛(wèi)就派上了用場。
用CanActivate來處理導(dǎo)航到某路由的情況。
用CanDeactivate來處理從當(dāng)前路由離開的情況.
最常用的是這兩個(gè)屬性,類似于react的enter和leave,只是描述不同,都是用來對進(jìn)入和離開路由做限制的,它們接受一個(gè)布爾值,來是否同意用戶在路由上做跳轉(zhuǎn)。
以一個(gè)登錄舉例,這里引入的Auth,是一個(gè)判斷是否登錄的方法。
login.Auth.ts:
import {Injectable} from "@angular/core"; import {Router, CanActivate} from "@angular/router"; import {NotyService} from "../../service/noty/noty.service"; @Injectable() export class Auth implements CanActivate { constructor(private noty: NotyService, private route: Router) { } canActivate() { return sessionStorage.getItem("user") ? true : (this.noty.alert({ text: "????請登錄~~????" }), this.route.navigate(["/login"]), false); } }
直接在瀏覽器中更改stones路由,就會(huì)觸發(fā)這個(gè)函數(shù),以此來檢測是否登錄。
本章路由到此為止,下一章節(jié)主要講UI框架的引入及在ts中引用js插件。
項(xiàng)目地址:https://github.com/jiwenjiang...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/88656.html
摘要:實(shí)戰(zhàn)系列目前處于章節(jié)不定,內(nèi)容不定階段,這一系列文章不會(huì)長篇大論的講解概念,而是以用為主,結(jié)合通俗易懂的實(shí)例來讓大家理解常用的知識(shí)點(diǎn)。原文鏈接實(shí)戰(zhàn)開發(fā) 《Angular 實(shí)戰(zhàn)系列》目前處于章節(jié)不定,內(nèi)容不定階段,這一系列文章不會(huì)長篇大論的講解概念,而是以用為主,結(jié)合通俗易懂的實(shí)例來讓大家理解常用的知識(shí)點(diǎn)。 章節(jié) Angular CLI 創(chuàng)建組件(Component) 使用CSS美化組...
摘要:實(shí)戰(zhàn)系列目前處于章節(jié)不定,內(nèi)容不定階段,這一系列文章不會(huì)長篇大論的講解概念,而是以用為主,結(jié)合通俗易懂的實(shí)例來讓大家理解常用的知識(shí)點(diǎn)。原文鏈接實(shí)戰(zhàn)開發(fā) 《Angular 實(shí)戰(zhàn)系列》目前處于章節(jié)不定,內(nèi)容不定階段,這一系列文章不會(huì)長篇大論的講解概念,而是以用為主,結(jié)合通俗易懂的實(shí)例來讓大家理解常用的知識(shí)點(diǎn)。 章節(jié) Angular CLI 創(chuàng)建組件(Component) 使用CSS美化組...
摘要:路由使用命令創(chuàng)建根路由模塊或自己建一個(gè)路由配置文件如將文件修改為以后在這里改動(dòng)配置將路由配置導(dǎo)出為以供調(diào)用子模塊中的路由使用而不是在根模塊中引入路由為特性模塊定義的路由在其模塊中引入路由配置路徑組件路徑組件懶加載子模塊子模塊需要配置路由設(shè)置 angular 4 路由 使用cli命令創(chuàng)建根路由模塊 ng g cl app.router 或自己建一個(gè)路由配置文件 如:app/app.rou...
摘要:通過設(shè)置路由參數(shù),控制輔助路由的插座是否顯示組件內(nèi)容。具體設(shè)置路由守衛(wèi)在設(shè)置路由守衛(wèi)時(shí)需先做下面兩步一在中添加二在中添加需要守衛(wèi)的路由的或者,前兩個(gè)是數(shù)組形式,是對象形式。在路由激活之前獲取路由數(shù)據(jù)在文件中實(shí)現(xiàn)接口 Angular4 路由 路由時(shí)傳遞數(shù)據(jù) 1.在查詢參數(shù)中傳遞數(shù)據(jù) /product?id=1&name=2 => ActivateRoute.queryParams[id]...
閱讀 1198·2021-11-10 11:35
閱讀 2925·2021-09-24 10:35
閱讀 2957·2021-09-22 15:38
閱讀 2807·2019-08-30 15:43
閱讀 1338·2019-08-29 18:39
閱讀 2557·2019-08-29 15:22
閱讀 2789·2019-08-28 18:17
閱讀 612·2019-08-26 13:37