知识盲区科普
Website VS. Webpage:
-
Website: A collection of web pages which are grouped together and usually connected together in various ways. Often called a "web site" or a "site."
-
Webpage: A document which can be displayed in a web browser such as Firefox, Google Chrome, Opera, Microsoft Internet Explorer or Edge, or Apple's Safari. These are also often called just "pages."
网站(Website)是网页(Webpage)的集合,网页往往指的就是.html文件。
前情提要
在Angular框架中,一个网页由许许多多的Component组合而成。
用我最喜欢的B站Up主主页做个例子,当前这个页面被叫做帮主的个人网站的主页(Mainpage),主页由许多部分组成,分别是最上方的背景和个人信息,中间的导航板(Dashboard),以及下面的内容区和一些小块的区域,这些部分共同组成了这个页面。
这时候如果我们点击TA的视频后的最多播放,我们会发现下面的视频内容动态的发生了变化,但是回去地址栏看一眼,发现网页地址并没有发生变化,这就是Javascript实现的网页与用户的动态交互。网页不再是静态的不可变化的,而是可以随着用户的操作发生某种程度上的变化。
但是这种改变是有限制的! 因为网页的框架是在html文件里被写死了的,也就是说大的框架动不了,能动的只有内容,比如这边的最多播放和最新发布,再比如粉丝数播放量这些数字,都是可以动态变化的。
接着我们点击导航板中的投稿
可以明显看到,网页的布局出现了变化,但又没有全变! 机智的小伙伴们这时候已经去点开了地址栏,发现网页地址变了!在主页的后面多了"/video",也就是说这时候我们看到的已经是另一个网页了!!
而这个功能就是所谓的Routing。
正文
Routes
ng generate module app-routing --flat --module=app
在Angular里面创建RoutingModule很简单,在对应Web应用文件夹输入以上指令即可,后面的--flat 和--module=app是可选项。
然后软件就会对应生成app-routing.module.ts文件
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HeroesComponent } from './heroes/heroes.component';
const routes: Routes = [
{ path: 'heroes', component: HeroesComponent }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
(注:以上代码不是软件原生代码,是修改过的)
routes里面的{path:‘heroes’, component: “HeroesComponent”},意味着当主页地址后面加上'heroes'之后,这个网站会动态生成一个叫做“HeroesComponent”的组件,而该组件里包含的就是新的网址下对应的要展现给用户的内容。
RouterOutlet
在安排好了当网址地址加了‘heroes’后缀后应该产生的内容后,我们还应该告诉我们的网页,这个新的内容应该怎么布局。依然是上面的例子,在点击了“投稿”之后,我们发现个人主页信息和导航条等内容是没有发生变化的,只有下面的内容区域发生了改变。也就是说,这个网页的html模版可能长这样:
<个人主页信息></个人主页信息>
<Dashboard></Dashboard>
<router-outlet></router-outlet>
router-outlet定义了网页在被route之后产生的新的组件的布局位置。
OK,到这边其实就可以结束了,现在只要我们在个人主页的地址后面加上"/video",页面就会被导向“投稿”页面。但我们能期待用户都知道去给地址加后缀吗?互联网产品,永远要秉持用户是傻瓜的原则进行设计!(不是
routerLink
所以这时候就有了下面的代码:
<a routerLink="/heroes">Heroes</a>
在点击Heroes链接之后,页面就会被自动导向“/heroes”页面,对应的component被生成并加入到对应位置,至此就实现了navigation的功能!
拓展
重定向
很多时候用户都只知道网站地址,也就是没有后缀的地址,但有时候这个地址对应的并不是一个导航页面(虽然大部分情况下是的),而我们又希望用户在输入这个地址之后会打开对应的导航页面,这时候可以这样子:
{ path: '', redirectTo: '/dashboard', pathMatch: 'full' }
在routes里加入这个重定向地址就可以啦。
返回上一级
返回上一级的功能很简单,利用Location服务即可,执行location.back()即可返回历史记录中的上一级网页。