[角度] 通过路由进行页面跳转
首先
在Angular中,有一种名为路由(Routing)的机制作为屏幕转换的手段,涉及URL的导航。
本文将通过一个简单的示例介绍路由的基本用法。
更新信息
2021年1月11日
- 記事内で扱ったコードを Angular v11.0.5 で確認しました
工作环境
$ ng --version
Angular$ node --version
npm$ npm --version
$ ng version_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | ‘_ \ / _` | | | | |/ _` | ‘__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/
Angular CLI: 11.0.5
Node: 12.18.3
操作系统: darwin x64
Angular: 11.0.5
… 动画, cli, 常用, 编译器, 编译器-cli, 核心, 表单
… 平台浏览器, 平台浏览器动态, 路由器
Ivy 工作区: 是
包 版本
———————————————————
@angular-devkit/architect 0.1100.5
@angular-devkit/build-angular 0.1100.5
@angular-devkit/core 11.0.5
@angular-devkit/schematics 11.0.5
@schematics/angular 11.0.5
@schematics/update 0.1100.5
rxjs 6.6.0
typescript 4.0.2
利用路由进行页面转换1
如上所述,在Angular中,使用路由来实现涉及URL移动的页面转换,这是通过@angular/router提供的功能实现的。
-
- Routes
-
- RouterModule
-
- RouterOutlet
- RouterLink
由于实际查看代码会更加直观易懂,所以我将提供一些使用这些代码的简单示例代码。
以下是第一个示例代码。
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
// ルーティングによる画面遷移のために必要なモジュール
import { RouterModule, Routes } from '@angular/router';
import { AppComponent } from './app.component';
import { PageAComponent } from './component/page-a/page-a.component';
import { PageBComponent } from './component/page-b/page-b.component';
import { PageCComponent } from './component/page-c/page-c.component';
// Routing を行う対象のコンポーネントを管理する
// path にセットした文字列にマッチしたURLが指定されると、対になっているコンポーネントが表示される
// 下記のように明示する以外にも
// '' で [/] のルートパスを指定できる
// '**' でワイルドカードを指定できる
const ROUTE_TABLE: Routes = [
{ path: 'page-a', component: PageAComponent },
{ path: 'page-b', component: PageBComponent },
{ path: 'page-c', component: PageCComponent }
];
@NgModule({
declarations: [
AppComponent,
PageAComponent,
PageBComponent,
PageCComponent,
],
imports: [
BrowserModule,
RouterModule.forRoot(ROUTE_TABLE), // 追加. routing の情報を登録する
],
providers: [
],
bootstrap: [AppComponent]
})
export class AppModule { }
<div>
<div class="block-header">
<p>Routing によるページ切り替えの動作確認を行う</p>
</div>
<div class="block-body">
<ul>
<!-- routing のためのリンク. routerLink に app.module.ts で定義したテーブル: ROUTE_TABLE に登録した path をセットする -->
<li><a routerLink="/page-a">Page-Aに遷移</a></li>
<li><a routerLink="/page-b">Page-Bに遷移</a></li>
<li><a routerLink="/page-c">Page-Cに遷移</a></li>
</ul>
</div>
</div>
<!-- routing で呼び出されたページは router-outlet で確保された領域に反映される -->
<router-outlet></router-outlet>
<p>
page-a works!
</p>
<p>
page-b works!
</p>
<p>
page-c works!
</p>
解释
代码中的所有注释都是解释的。
de shì de.)
-
- app.module.ts
ROUTE_TABLE に画面遷移の対象となるコンポーネントと path のオブジェクトを登録する -> ルーティング情報の作成
作成したルーティング情報を RouterModule.forRoot でアプリに登録する
app.component.html
タグは RouterOutlet で提供されているセレクタで、routerLink は RouterLink から提供されているセレクタ
セットした領域に routerLinkに指定したコンポーネントのテンプレート内容が表示される
routerLink にセットする URL は、 ROUTE_TABLE にセットした path と同じ でなければならない
他のテンプレート
文字列を表示するだけの単純なもの
所以,对于ROUTE_TABLE,请再补充一些细节。
ROUTE_TABLE の補足
ROUTE_TABLE で path を登録する際、以下の動きとなるので覚えておくとデフォルトページやエラーページの表示に役立つと思う。
” をセットすれば URL のルートパスで表示するコンポーネントを登録できる
** をセットすると、どの URL にも当てはまらない場合に表示するコンポーネントを登録できる
嗯,当你执行上述的示例时
执行结果 (shí jié guǒ)
点击每个组件的链接可以实现这一点。
-
- URL が移動していること
- 表示される画面が切り替わっていること
可以确认。
通过路由实现的页面跳转2
在上述的例子中,我们确认了通过URL的移动实现了页面跳转,但是在app.component.html中设置的routerLink导致了像“站点导航”那样的界面切换实现。
在下面的示例中,不是将routerLink设置在app.component.html中,而是将其设置在每个页面上,以观察页面本身的切换。
样例代码2
// 前掲のコードとの差分だけ
// Routing を行う対象のコンポーネントを管理する
// path にセットした文字列にマッチしたURLが指定されると、対になっているコンポーネントが表示される
// 下記のように明示する以外にも
// '' で [/] のルートパスを指定できる
// '**' でワイルドカードを指定できる
const ROUTE_TABLE: Routes = [
// [/] パス指定時は page-a を表示する
{ path: '', component: PageAComponent },
{ path: 'page-a', component: PageAComponent },
{ path: 'page-b', component: PageBComponent },
{ path: 'page-c', component: PageCComponent }
];
<!-- routing で呼び出されたページは router-outlet で確保された領域に反映される -->
<router-outlet></router-outlet>
<div>
<div class="block-header">
<p>Routing によるページ切り替えの動作確認を行う</p>
</div>
<div class="block-body">
<ul>
<!-- routing のためのリンク. routerLink に app.module.ts で定義したテーブル: ROUTE_TABLE に登録した path をセットする -->
<li><a routerLink="/page-b">Page-Bに遷移</a></li>
<li><a routerLink="/page-c">Page-Cに遷移</a></li>
</ul>
</div>
</div>
<p>
page-a works!
</p>
<div>
<div class="block-header">
<p>Routing によるページ切り替えの動作確認を行う</p>
</div>
<div class="block-body">
<ul>
<!-- routing のためのリンク. routerLink に app.module.ts で定義したテーブル: ROUTE_TABLE に登録した path をセットする -->
<li><a routerLink="/page-a">Page-Aに遷移</a></li>
<li><a routerLink="/page-c">Page-Cに遷移</a></li>
</ul>
</div>
</div>
<p>
page-b works!
</p>
<div>
<div class="block-header">
<p>Routing によるページ切り替えの動作確認を行う</p>
</div>
<div class="block-body">
<ul>
<!-- routing のためのリンク. routerLink に app.module.ts で定義したテーブル: ROUTE_TABLE に登録した path をセットする -->
<li><a routerLink="/page-a">Page-Aに遷移</a></li>
<li><a routerLink="/page-b">Page-Bに遷移</a></li>
</ul>
</div>
</div>
<p>
page-c works!
</p>
解释
这个样本的重点有三个。
app.module.ts で定義している ROUTE_TABLE で、ルートパス( [/] ) で表示するコンポーネントに page-a.component を指定している
app.component.html には しかセットしていない
page-a, page-b, page-c に各コンポートへの routerLink をセットしている
通过这样做,app.component.html 中将包含
-
- アプリ起動時は page-a.component.html の内容が表示される
- リンククリックされる毎に該当するコンポーネントのビューだけが表示される
开始行动。
执行结果
- アプリ起動直後
- Page-Bに遷移をクリックした
- Page-Cに遷移をクリックした
- Page-Aに遷移をクリックした
由于上述的动作所示
基于上述动作所展示的
-
- 起動直後はルートパスに指定した page-a.component.html が表示されること
- 各画面のリンクに応じて画面そのものが切り替わっていること
确实得到了确认。
请参考
-
- @angular/router
-
- Routes
-
- RouterModule
-
- RouterOutlet
- RouterLink
源代码
本次文章中所创建的代码已经上传至以下位置供参考。
-
- ルーティングによる画面遷移1のコード
- ルーティングによる画面遷移2のコード