angular2 路由
路由是个模块,命令行生成:ng generate module routerTest;
自己组建:
路由模块说明:
Routes:路由配置,路由配置文件类型。比如:const routing:Routes =[{path: '',component:HomeComponent}];
RouterOutlet:HTML 占位符,路由的模版将会在这个位置展现。
RouterLink :HTML 中的路由链接,相当与angular1 的ui-serf。改变地址来转换不同的模块。
Router :执行路由对象的跳转和转跳,相当于angular1的$state.go。
ActivatedRoute : 获取激活路由传入的参数。
1.创建路由文件,导入路由模块。在app文件夹下创建 app.router.ts文件,打开文件导入路由:
import {Routes,RouterModule} from "@angular/router";
2. 导入路由的组件
import {HomeComponent} from "./home/home.component"; //主页
import {PhoneComponent} from "./phone/phone.component"; // 联系我们页面
import {MapComponent} from "./map/map.component"; //地图页面
3.配置路由:
const routing:Routes =[
{path: '',component:HomeComponent},
{path: 'phone',component:PhoneComponent},
{path: 'map',component:MapComponent},
//找不到
{path: '**',component:HomeComponent},
//重定向
{path:'',redirectTo:'/home',pathMatch:"full"}
];
4.初始化路由:
export const router = RouterModule.forRoot(routing); 或
@NgModule({
imports:[RouterModule.forRoot(routing)],
exports:[RouterModule],
providers:[]
})
export class router{
}
5.在app.module.ts文件中导入以便执行:
import { router } from './app.router';
@NgModule({
declarations: [
AppComponent,
HomeComponent,
MapComponent,
PhoneComponent
],
imports: [
BrowserModule,
FormsModule,
router //导入
],
providers: [],
bootstrap: [AppComponent]
})
6.页面路由配置
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand">
在线竞拍
</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav ">
<li role="presentation" [class.active]="isActive == 1" (click)="isActive = 1"><a [routerLink]="['/']">关于我们</a></li>
<li role="presentation" [class.active]="isActive == 2" (click)="isActive = 2"><a [routerLink]="['/phone']">联系我们</a></li>
<li role="presentation" [class.active]="isActive == 3" (click)="isActive = 3"><a [routerLink]="['/map']">网站地图</a></li>
</ul>
</div>
</div>
</nav>
<router-outlet></router-outlet> 7.事件点击跳转,如angualr1的$state.go
import {Router} from "@angular/router"
constructor(private router:Router){ }
toGoDetail(){
this.router.navigate(['/phone']);
} 8.路由传参三种方式:
const routing:Routes =[
{path: '',component:HomeComponent},
{path: 'phone/:person/:name',component:PhoneComponent},
{path: 'map',component:MapComponent}
];
<li role="presentation" [class.active]="isActive == 1" (click)="isActive = 1"><a [routerLink]="['/']">关于我们</a></li>
<li role="presentation" [class.active]="isActive == 2" (click)="isActive = 2"><a [routerLink]="['/phone',1,2]">联系我们</a></li>
<li role="presentation" [class.active]="isActive == 3" (click)="isActive = 3"><a [routerLink]="['/map']">网站地图</a></li> 或或或
const routing:Routes =[
{path: '',component:HomeComponent},
{path: 'phone/:person/:name',component:PhoneComponent},
{path: 'map',component:MapComponent}
];
<li role="presentation" [class.active]="isActive == 1" (click)="isActive = 1"><a [routerLink]="['/']">关于我们</a></li>
<li role="presentation" [class.active]="isActive == 2" (click)="isActive = 2"><a [routerLink]="['/phone/1/2']">联系我们</a></li>
<li role="presentation" [class.active]="isActive == 3" (click)="isActive = 3"><a [routerLink]="['/map']">网站地图</a></li>
或或或
{path: '',component:HomeComponent},
{path: 'phone',component:PhoneComponent,data:[{person:1,name:2}]},
{path: 'map',component:MapComponent}
9.页面参数接收
import {AcrivatedRoute} from "@angular/router" constructor(private route:ActivatedRoute){
//route.snapshot 传入的参数对象 需答应出来,不同传法,值不太一样
}
10.配置子路由
app.router.ts:
import { NgModule } from '@angular/core';
import {Routes,RouterModule} from "@angular/router";
import {HomeComponent} from "./home/home.component";
import {PhoneComponent} from "./phone/phone.component";
import {MapComponent} from "./map/map.component";
import {ProductComponent} from "./product/product.component";
import {CarouselComponent} from "./carousel/carousel.component";
const routing:Routes =[
{path:'',redirectTo:'/home',pathMatch:"full"},
{path: 'home',component:HomeComponent},
{path: 'phone',component:PhoneComponent,data:[{person:1,name:2}],
children:[
{path:'',component:CarouselComponent},
{path:'detail',component:ProductComponent}
]
},
{path: 'map',component:MapComponent},
{path: '**',component:HomeComponent}
];
@NgModule({
imports:[RouterModule.forRoot(routing)],
exports:[RouterModule],
providers:[]
})
export class router{
}
/*export const router = RouterModule.forRoot(routing);*/
<a [routerLink]="['./detail']">详情</a>
<a [routerLink]="['./']">商品</a>
<router-outlet></router-outlet>
11.辅助路由,相当于tab切换,并不改变主路由
const routing:Routes =[
{path:'',redirectTo:'/home',pathMatch:"full"},
{path: 'home',component:HomeComponent},
{path: 'phone',component:PhoneComponent,data:[{person:1,name:2}],
children:[
{path:'',component:CarouselComponent},
{path:'detail',component:ProductComponent}
]
},
{path: 'map',component:MapComponent}, //挂载在name为copy的<router-outlet name="copy"></router-outlet>的地方 {path: 'picture',component:CarouselComponent,outlet:'copy'},
{path: 'product',component:ProductComponent,outlet:'copy'},
{path: '**',component:HomeComponent}
]; HTML:
<div class="container">
<ul class="nav navbar-nav ">
<li role="presentation" ><a [routerLink]="[{outlets:{copy:'picture'}}]">轮播图</a></li>
<li role="presentation" ><a [routerLink]="[{outlets:{copy:'product'}}]">联系我们</a></li>
</ul>
</div>
<router-outlet name="copy"></router-outlet>
12.组件的第二种导入方式,通过路由致使在app.module.ts文件中不需要在申明所有的组件,被路由的组件可以在路由模块文件中申明:
angular2 路由的更多相关文章
- 从Angular2路由引发的前后端路由浅谈
笔者的学习进度比较慢,直到两年以前写的网站都还是以服务端为主导的,即网站的所有视图都由服务器视图模板来渲染,笔者使用的是 DotNet MVC,开发套路就是在Controller里面写Action,在 ...
- Angular2 路由问题修复 、求解
Angular2 提供了比angular1 更为强大的路由功能,但是在具体使用路由过程中,可是出现了很多路由不按照预想的方式执行的问题.为了说明今天的问题,我特地新建了一个测试工程.欢迎交流. 首先介 ...
- angular2路由与express路由冲突的问题
angular2的路由定义了一个/a,如果走angular的路由没问题,如果直接访问/a就会出现cannot GET /a的错误,原因就是express的路由问题. 所以路由走angular2,那ex ...
- angular2路由之routerLinkActive指令
angular2的routerLinkActive指令在路由激活时添加样式class .red{ color: red;} <a routerLink="/user/login ...
- 解决使用angular2路由后,页面刷新后报404错误。
点击路由链接跳转页面是正常的,但是当刷新页面时就出现了404错误. 解决方法如下: 在app.module.ts中添加import: import {HashLocationStrategy,Loca ...
- 关于angular2跳路由防止页面刷新的做法(Angular2路由重载)
simpleReuseStrategy.ts // 创建重用策略 import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStr ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- angular2地址栏路由配置
一步一步route过去可以,地址栏直接写url怎么就找不到了呢? 这关乎于Nodejs的express路由规则(http://hm4123660.iteye.com/blog/2195035) exp ...
- Angular2学习笔记——路由器模型(Router)
Angular2以组件化的视角来看待web应用,使用Angular2开发的web应用,就是一棵组件树.组件大致分为两类:一类是如list.table这种通放之四海而皆准的通用组件,一类是专为业务开发的 ...
随机推荐
- UVA 10559 Blocks
题目大意:有一串带颜色的方块,每次可以消掉颜色相同的一段,得到size^2的分数,问最多能得到多少分数.n≤200. 给这题状态跪下来. 显然的区间DP,但设f[i][j]是不够的. 考虑到之前做过的 ...
- MySQL5.6中date和string的转换和比较
Conversion & Comparison, involving strings and dates in MySQL 5.6 我们有张表,表中有一个字段dpt_date,SQL类型为da ...
- sourcetree跳过注册的方法
当前只有Win的版本,Mac自行百度(笑) 很多人用git命令行不熟练,那么可以尝试使用sourcetree进行操作. 然鹅~~sourcetree又一个比较严肃的问题就是,很多人不会跳过注册或者操作 ...
- 【开源】AspnetCore 2.0 自动API文档生成组件,支持protobuffer
本文地址 http://www.cnblogs.com/likeli/p/8204054.html 关于 API文档自动生成,用于对APP端的开发帮助文档生成,默认ProtoBuffer传输格式. 本 ...
- struts快速入门第一篇 —— struts相关XML配置映射及讲解
我们回忆一下在学习JavaWeb过程中(Jsp + servlet编程)所感受到的Servlet的不足: 1 Servllet很多时,web.xml中的代码会很多.这样一来,维护起来就不方便,不利于团 ...
- NoFragment重大bug
在activity中切换fragment,有以下几点问题需要注意: 例如做一个类似于这样的tab切换fragment的,有以下几点问题 1.切换fragment后,前几个fragment能透视,解决方 ...
- Head First设计模式之目录
只有沉淀.积累,才能远航:沉沉浮浮,脚踏实地. 这本书已经闲置了好久,心血来潮,决定写个目录,让自己坚持看完这本书 创建型模式 抽象工厂模式(Abstract factory pattern): 提供 ...
- 一张图,理解JAVA体系结构、运行机制、JVN运行机制、Java平台(初学)
初学JAVA,学一门语言不仅仅是学其语法,逻辑思维能力,还有每一门语言都有自己独特的一方面,所以才有那么多语言要学啊 = =,所以想要真的学好语言,其编译机制,运行机制多少也要涉猎一些啊.这是初学JA ...
- zabbix web监控模板
问题关键:宏变量 {HOST.NAME} 配置 我直接在 Linux OS这个模板中添加的,都随意: 效果 加个报警 以上.
- wtforms快速使用和源码分析(基于flask)
wtforms 和django的form组件大同小异,下面给出一个应用举例以便快速查询. 开始使用 from flask import Flask, render_template, request, ...