利用angular4和nodejs-express构建一个简单的网站(四)—angular路由初步

虚像
• 阅读 3789

上一篇文章对用户发来的注册和登录信息进行了处理,并实现了将注册用户信息插入到mysql数据库的数据表和从mysql数据库的数据表中查询到用户的登录信息并返回用户认证信息,从这篇起,开始构建前端的登录和注册页面,并实现angular路由。
为了让大家能够方便理解,我简单的画了一张我这个程序的路由分析图:

利用angular4和nodejs-express构建一个简单的网站(四)—angular路由初步

创建初始页面并设置总路由

初始页面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的代码如下:

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和内容。代码如下:

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有以下属性:

  • imports — 本模块声明的组件模板需要的类所在的其它模块,其中最重要的是BrowserModule,这个在每个在浏览器中运行应用都需要它。
  • declarations —声明本模块中拥有的视图类,在AppModule中定义了应用的唯一组件AppComponent。
  • bootstrap — 根组件,Angular 创建它并插入index.html宿主页面。
  • providers - 服务的创建者,并加入到全局服务列表中,可用于应用任何部分,在这里加入了JumbotronServive,用于提供bootstrap的jumbotron组件中title、lead、content的更新。

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模块。

点赞
收藏
评论区
推荐文章
Easter79 Easter79
4年前
SpringCloud系列五:为Eureka Server添加用户认证及元数据
1\.回顾上一篇博客讲解了Eureka集群及将微服务注册到集群上。在前面的讲解中,EurekaServer都是允许匿名访问的,本次将讲解如何构建一个需要登录才能访问的EurekaServer。2\.为EurekaServer添加用户认证复制项目microservicediscoveryeureka,将Art
Stella981 Stella981
4年前
PHP操作mysql数据库
PHP向MySQL发送数据、PHP操作MySQL数据库是重点中的重点。为大家举一些例子:1.要注册一个用户,是将表单的数据POST发送给PHP写入数据库2.购买一个商品,是将商品信息和用户信息通过PHP写入到数据库3.在线付费,是将用户的充值信息通过PHP写入数据库4.修改头像上传的头像地址得到后,通过PHP修改数据库里头像字段
Stella981 Stella981
4年前
Linux用户登录记录日志和相关查看命令汇总(转)
\1utmp、wtmp、btmp文件Linux用户登录信息放在三个文件中:1  /var/run/utmp:记录当前正在登录系统的用户信息,默认由who和w记录当前登录用户的信息,uptime记录系统启动时间;2  /var/log/wtmp:记录当前正在登录和历史登录系统的用户信息,默认由las
Stella981 Stella981
4年前
OAuth 2.0授权框架详解
简介在现代的网站中,我们经常会遇到使用OAuth授权的情况,比如有一个比较小众的网站,需要用户登录,但是直接让用户注册就显得非常麻烦,用户可能因为这个原因而流失,那么该网站可以使用OAuth授权,借助于github或者其他的第三方网站的认证授权,来获取相关的用户信息,从而避免了用户注册的步骤。当然,很可能在第三方网站上授权获得用户信息之后,还需
Wesley13 Wesley13
4年前
DDD实战进阶第一波(十一):开发一般业务的大健康行业直销系统(实现经销商代注册用例与登录令牌分发)
前两篇文章主要实现了经销商代注册的仓储与领域逻辑、经销商登录的仓储与相关逻辑,这篇文章主要讲述经销商代注册的用例与经销商登录的查询功能。一.经销商代注册用例在经销商代注册用例中,我们需要传递经销商的基本注册信息,这个信息是做成了DTO对象。1.经销商注册的DTO对象:publicclassAddDealerDTO
Wesley13 Wesley13
4年前
Mysql用户与权限操作
1.用户与权限概述用户是数据库的使用者和管理者。MySQL通过用户的设置来控制数据库操作人员的访问与操作范围。服务器中名为mysqI的数据库,用于维护数据库的用户以及权限的控制和管理。MySQL中的所有用户信息都保存在mysql.user数据表中。根据my
Wesley13 Wesley13
4年前
JavaFX+SpringBoot+验证码功能的小型薪酬管理系统
2020.07.22更新1概述1.1简介一个简单的小型薪酬管理系统,前端JavaFX后端SpringBoot,功能倒没多少,主要精力放在了UI和前端的一些逻辑上面,后端其实做得很简单。主要功能:用户注册/登录验证码找回密码用户修改信息,修改头像
Stella981 Stella981
4年前
Android用户操作web后台登录后获取cookie安全通行证认知
     HTTP客户端编程中最常碰见的问题,很多网站的内容都只是对注册用户可见的,这种情况下就必须要求使用正确的用户名和口令登录成功后,方可浏览到想要的页面。因为HTTP协议是无状态的,也就是连接的有效期只限于当前请求,请求内容结束后连接就关闭了。在这种情况下为了保存用户的登录信息必须使用到Cookie机制。以JSP/Servlet为例,当浏览器请
艾木酱 艾木酱
3年前
应用实战|微信小程序开发示例之Super课表
此示例提供了使用MemFireCloud构建一个课表的小程序的步骤。小程序用到的MemFireCloud的功能包括:云数据库:存储小程序数据表的信息。用户验证:小程序使用MemFireCloud提供的用户认证的API接口,快速完成用户注册登录操作。云存储:存储小程序的注册用户上传的头像。行级安全策略:采用RLS策略来限制用户访问行为,用户可
dkll dkll
2个月前
圈子系统源码小程序:uni+php框架,支持群内红包互动,小白群主也能轻松活跃社群
前端页面设计:注册/登录页面:用户可以通过此页面进行注册和登录操作。个人主页:展示用户的个人信息、头像、动态等。关注列表:展示用户的关注列表,包括好友信息等。聊天界面:用户可以与好友进行一对一或群聊。后端逻辑处理:用户认证:验证用户的注册和登录信息,确保用