angular2中路由的相关知识
路由策略 http://host[:port]/[/path][?query][#hash] [/path] PathlocationStrategy [#hash] HashlocationStrategy 比如 PathlocationStrategy http://localhost:4200/list HashlocationStrategy http://localhost:4200/#/list
@NgModule( imports:[ RouterModule.forRoot(rootRouterConfig,{useHash:true}) ] ) PathlocationStrategy
base路径设置方法 <!-- index.html --> <head> <base href="/app"> </head>
import {APP_BASE_HREF} from '@angular@common'; @NgModule({ providers:[ {provide:APP_BASE_HREF,useValue:'/app'} ] })
<div [routerLink]="['/set']" >jump to setting</div> 注意引号的写法
示例 <nav routerLinkActive="activeClass"> <button [routerLink]="['/set']" >set</button> <button [routerLink]="['/main']" >main</button> </nav> routerLinkActive:当被(激活)点击或者子元素被(激活)点击时,调用css的类进行样式展示 2 代码跳转 import {Router} from '@angular/router'; export class listComponent { constructor(private _router:Router) { _router.navigateByUrl('/collection'); _router.navigate('/collection'); _router.navigateByUrl(['/collection',{name:'title'}]);//传参数 } } 路由参数 // app.routes.ts export const AppRouters:RouterConfig=[ {path:'detail/:id',component:DetailComponent} ];
<a [routerLink]="['/detail',1]" > <a [routerLink]="'/detail/1'" > _router.navigate(['/detail',1]) _router.navigate('/detail/1') Query 参数 http://localhost:3000/list?limit=5 //查看列表的前五个 写法 <a [routerLink]="['list']" [queryParams]="{limit:5}" > this._router.navigate(['/list'],{ queryParams:{limit:5} }); this._router.navigateByUrl('/list?limit=5');
import { Component,OnInit,OnDestroy } from '@angular/core'; import {ActivatedRoute} from '@angular/router'; @Component({ selector: 'app-persons',templateUrl: './persons.component.html',styleUrls: ['./persons.component.css'] }) export class PersonsComponent implements OnInit,OnDestroy { contacts:any[]; private limit:number; private sub:any; constructor(private _activatedRoute:ActivatedRoute) { } ngOnInit() { this.getContacts(); } getContacts() { this.sub=this._activatedRoute.queryParams.subscribe(params=>{ this.limit = parseInt(params['limit']); if(this.limit) { this.contacts.splice(this.limit); } }) } ngOnDestroy(){ this.sub.unsubscribe(); } }
// admin.routes.ts 这是AdminModule的路由 { path:'main',component:MainComponent,children:[ {path:'',redirectTo:'detail',pathMatch:'full'},{path:'detail',component:DetailComponent},{path:'set',component:SetComponent} ] } //main.component.html,注意又加了一个router-outlet <p> admin - main works! </p> <a [routerLink]="'detail'">detail</a> <a [routerLink]="'set'">set</a> <router-outlet></router-outlet> 这样实现了界面上二级路由的效果 routes的拦截器
1激活拦截的应用情景,比如没有登陆无法看到首页 import { Injectable } from '@angular/core'; import {CanActivate} from '@angular/router'; @Injectable() export class LoginService implements CanActivate { constructor() { } canActivate(){ return false;//禁止访问,返回false,允许访问返回true; } } angular-cli生成服务时不会自动添加,因此需要手动写到*.moduel.ts @NgModule({ ... providers:[LoginService] }) 反激活拦截 CanDeactivate 能否离开当前路由 import { Injectable } from '@angular/core'; import {CanDeactivate,ActivatedRouteSnapshot,RouterStateSnapshot} from '@angular/router'; @Injectable() export class DeactivateService implements CanDeactivate<any>{ constructor() { } canDeactivate(component:any,route:ActivatedRouteSnapshot,state:RouterStateSnapshot){ //component.isModified() 意思是当前组件提供方法isModified()来判断能否离开 if(component.isModified()){ return true; }else{ return false; } } } 题外话注意点
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |