上一篇文章對用戶發來的註冊和登陸信息進行了處理,並實現了將註冊用戶信息插入到mysql數據庫的數據表和從mysql數據庫的數據表中查詢到用戶的登陸信息並返回用戶認證信息,從這篇起,開始構建前端的登陸和註冊頁面,並實現angular路由。
爲了讓你們可以方便理解,我簡單的畫了一張我這個程序的路由分析圖:html
初始頁面app.component.html的代碼以下:前端
<div class="bg"> <div class="jumbotron jumbotron-fluid text-center"> <div class="container"> <h1 class="display-3">{{title}}</h1> <p class="lead">{{lead}}</p> <hr class="my-4"> <p class="content">{{content}} </p> </div> </div> <router-outlet></router-outlet> </div>
它是由一個bootstrap的jumbotron組件和一個router-outlet組成,在jumbotron中的標題、lead和內容應該隨着導航到不一樣的頁面而改變,因此我將這3個標籤的內容分別用插值表達式title、lead、content代替。爲了作到這一點,我建立了一個JumbotronServive服務提供商,經過rxjs的消息推送來實現。JumbotronServive的代碼以下:mysql
import { Injectable } from '@angular/core'; import { Subject } from 'rxjs/Subject'; export class Jumbotron{ constructor( public title:string, public lead:string, public content:string ){} } @Injectable() export class JumbotronServive{ private jumbSource = new Subject<Jumbotron>(); jumb$ = this.jumbSource.asObservable(); setJumbotron(jumb: Jumbotron){ this.jumbSource.next(jumb); } }
首先建立了一個Jumbotron類,包含3個屬性title、lead、content分別對應jumbotron中的標題、lead和內容,而後寫一個服務提供商類,在這個類中聲明瞭一個rxjs的Subject對象(Subject是容許值被多播到多個觀察者的一種特殊的Observable),而後調用Subject的asObservable()聲明一個Observable對象jumb$來訂閱Subject發送的消息。最後聲明一個setJumbotron來發送修改過的Jumbotron對象。在AppComponent類中,咱們就能夠訂閱並更改jumbotron中的標題、lead和內容。代碼以下:sql
jumServ.jumb$.subscribe( jumb=>{ this.title = jumb.title; this.lead = jumb.lead; this.content = jumb.content; });
router-outlet:路由出口,用於標記該在哪裏顯示視圖,也就是說導航到的全部路由視圖都會在<router-outlet></router-outlet>
標籤中顯示。
angular-cli(如下簡稱ng)已經爲咱們寫好了基本的AppModule(Angular程序的根模塊,Angular經過引導根模塊來啓動該應用),在這裏列出看一下:數據庫
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { AppComponent } from './app.component'; @NgModule({ declarations: [ AppComponent, ], imports: [ BrowserModule, NgbModule.forRoot(), AppRoutingModule ], providers: [ JumbotronServive, ], bootstrap: [AppComponent] }) export class AppModule { }
@NgModule裝飾器將AppModule標記爲 Angular 模塊類(也叫NgModule類)。 @NgModule接受一個元數據對象,告訴 Angular 如何編譯和啓動應用。
@NgModule有如下屬性:bootstrap
AppRoutingModule是應用的路由模塊,具體代碼:數組
import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { PageNotFoundComponent } from './page-not-found.component'; const appRoutes: Routes = [ { path:'', redirectTo:'/users', pathMatch:'full' }, {path: '**', component: PageNotFoundComponent} ]; @NgModule({ imports: [ RouterModule.forRoot(appRoutes) ], exports:[ RouterModule ] }) export class AppRoutingModule{}
首先定義個路由數組,其中的路由對象包括路由路徑(path)、和路由對應的組件(component),由於咱們的網站一打開就進入用戶管理界面,在導航到首頁時須要直接跳轉到users路由,首頁路由('')沒有對應組件,而是直接跳轉到users路由。path:'**'路由的做用是在找不到任何路由時,訪問PageNotFoundComponent組件。
定義路由數組後,用@NgModule裝飾器導入RouterModule,並將路由數組傳遞給RouterModule的forRoot數組。
最後導出RouterModule模塊。瀏覽器