angularjs路由,angular动态路由
什么是路由?本篇文章带大家深入了解一下有角的中的路由,希望对大家有所帮助!
路由简介
路由是实现单页面应用的一种方式,通过监听混杂或者历史的变化,渲染不同的组件,起到局部更新的作用,避免每次统一资源定位器变化都向服务器请求数据。【相关教程推荐: 《angular教程》 】
路由配置
配置路由模块:approuter.module.ts
const routes: Routes=[
{ path: first ,component: FirstComponent },
{路径:"父",组件:第二组件}
]
@NgModule({
进口:[
公共模块
//RouterModule.forRoot方法会返回一个模块,其中包含配置好的路由器服务
//提供者,以及路由库所需的其它提供者。
RouterModule.forRoot(routes,{
//enableTracing: true,//-仅用于调试目的
//配置所有的模块预加载,也就是懒加载的模块,在系统空闲时,把懒加载模块加载进来
//PreloadAllModules策略不会加载被罐头装载守卫所保护的特性区。
预加载策略:预加载所有模块
})
],
出口:[
第一个组件,
第二个组件,
路由器模块
],
声明:[
第一个组件,
第二成分
]
})
导出类ApprouterModule { }app.module.ts中引入改模块:
进口:[ ApprouterModule ]重定向路由:
const routes: Routes=[
{路径: ,重定向到: 第一个,路径匹配:完整 }
]通配符路由:
const routes: Routes=[
//路由器会使用先到先得的策略来选择路由。由于通配符路由是最不具体的那个,因此务必确保它是路由配置中的最后一个路由。
{路径:"**",组件:NotFoundComponent }
]路由懒加载:
配置懒加载模块可以使得首屏渲染速度更快,只有点击懒加载路由的时候,对应的模块才会更改。
const routes: Routes=[
{
路径:"加载",
loadChildren: ()=import(./load/load。模块”).然后(m=m.ListModule),
//CanLoadModule如果返回假的,模块里面的子路由都没有办法访问
canLoad: [CanLoadModule]
},
]懒加载模块路由配置:
从" @角度/核心"导入{ ng模块};
从" @angular/common "导入{公共模块};
从""导入{加载组件} ./load。组件;
从" @angular/router "导入{ RouterModule,Routes }。
从导入{ LoadTwoComponent }./././app/components/加载两个/加载两个。组件;
从导入{ LoadOneComponent }./././app/components/load one/load one。组件;
const routes: Routes=[
{
路径: ,
组件:负载组件
儿童:[
{ path: LoadOne ,component: LoadOneComponent },
{路径:加载二,组件:LoadTwoComponent }
]
},
]
@NgModule({
进口:[
公共模块
//子模块使用对孩子来说配置
RouterModule.forChild(routes)
],
声明:[
负载组件,
LoadOneComponent,
LoadTwoComponent
]
})
导出加载模块类{ }懒加载模块路由导航:
a[路由器链接]=[ load one ] load one/a
a[路由器链接]=[ load two ] load two/a
路由器出口/路由器出口路由参数传递:
const routes: Routes=[
{ path: second/:id ,组件:第二组件},
]//routerLinkActive配置路由激活时的类
a[路由器链接]=[/秒,12]路由器链接活动=活动秒/a获取路由传递的参数:
从" @angular/router "导入{ ActivatedRoute,ParamMap,Router }。
从" @角度/核心"导入{组件,在init }上。
从" rxjs/运算符"导入{切换地图};
@组件({
选择器:"应用程序-秒",
templateUrl:“”./second.component.html ,
样式URL:[ ./second.component.scss]
})
导出类第二成分实现OnInit {
构造器(私有activatedRoute: ActivatedRoute,私有路由器:路由器){ }
ngOnInit() {
控制台。日志(这个。激活路线。快照。params);//{id: 12}
//控制台。日志(这个。激活的路线);
//这种形式可以捕获到全球资源定位器(统一资源定位器)输入/秒/18然后点击a [routerLink]=[ /second ,12 ]second/a
//是可以捕获到的。上面那种是捕获不到的。因为不会触发恩戈尼特,公用了一个组件实例。
这个。激活路线。参数映射。管道(
开关映射((params: ParamMap)={
控制台。日志(参数。get( id );
返回”参数”;
})).订阅(()={
})
}
gotoFirst() {
这个。路由器。导航([/first ]);
}
}queryParams参数传值,参数获取也是通过激活的路由的依赖注入
!-查询参数参数传值-
a[路由器链接]=[/first ][查询参数]= { name: first } first/a
!- ts中传值-
!-这个。路由器。navigate([/first ],{ query params:{ name: first });-路由守卫:canActivate,canDeactivate,resolve,canLoad
路由守卫会返回一个值,如果返回真实的继续执行,假的阻止该行为,UrlTree导航到新的路由。
路由守卫可能会导航到其他的路由,这时候应该返回错误。路由守卫可能会根据服务器的值来
决定是否进行导航,所以还可以返回承诺或可观察的,路由会等待
返回的值是真实的还是错误。
可以激活导航到某路由。
被激活的儿童导航到某子路由。
const routes: Routes=[
{
路径:"父级",
组件:ParentComponent,
canActivate: [AuthGuard],
儿童:[
//无组件子路由
{
路径: ,
canActivateChild:[AuthGuardChild],
儿童:[
{ path: childOne ,component: ChildOneComponent },
{ path: childTwo ,component: ChildTwoComponent }
]
}
],
//有组件子路由
//孩子:[
//{ path: childOne ,component: ChildOneComponent },
//{ path: childTwo ,component: ChildTwoComponent }
//]
}
]从@角度/核心导入{内射};
从" @angular/router "导入{ CanActivate,ActivatedRouteSnapshot,RouterStateSnapshot }。
@可注射({
提供了:"根",
})
导出类AuthGuard实现可以激活
能激活(
接下来:ActivatedRouteSnapshot,
状态:路由状态快照):任何{
//返回真实的
//返回承诺的情况
返回新承诺((解决,拒绝)={
setTimeout(()={
解决(真);
}, 3000);
})
}
}从" @角度/核心"导入{内射};
导入{
ActivatedRouteSnapshot,
路由器状态快照,
被激活的儿童
}来自@ angular/router ;
@可注射({
提供了:"根",
})
导出类AuthGuardChild实现CanActivateChild {
构造函数(){}
canActivateChild(
路由:ActivatedRouteSnapshot,
state:RouterStateSnapshot):boolean {
返回真实的
}
}parent.component.html路由导航:
!-使用相对路径-
一个[routerLink]=[ ./childOne ]一个/a
!-使用绝对路径-
a[路由器链接]=[/父/子两个]两个/a
路由器出口/路由器出口可以停用路由离开,提示用户没有保存信息的情况。
const routes: Routes=[
{ path: first ,component: FirstComponent,cande activate:[cande activate guard]}
]从导入{第一组件} ./组件/第一个/第一个。组件;
从" @angular/router "导入{ routerstatsnapshot };
从" @angular/router "导入{ activatedroutensnapshot };
从" @角度/核心"导入{内射};
从" @angular/router "导入{可以激活};
@可注射({
提供了:"根",
})
导出类CanDeactivateGuard实现CanDeactivateany {
canDeactivate(
组件:任何,
路由:ActivatedRouteSnapshot,
状态:路由器状态快照
):boolean {
//组件获取到组件实例
控制台。日志(组件。islogin);
返回真实的
}
}canLoad是否能进入懒加载模块:
const routes: Routes=[
{
路径:"加载",
loadChildren: ()=import(./load/load。模块”).然后(m=m.LoadModule),
//CanLoadModule如果返回假的,模块里面的子路由都没有办法访问
canLoad: [CanLoadModule]
}
]从@angular/compiler/src/core 导入{ Route };
从" @角度/核心"导入{内射};
从" @angular/router "导入{可以加载};
@可注射({
提供了:"根",
})
导出类CanLoadModule实现可以装载{
canLoad(route: Route): boolean {
返回真实的
}
}解决配置多久后可以进入路由,可以在进入路由前获取数据,避免白屏
const routes: Routes=[
{ path: resolve ,component: ResolveDemoComponent,resolve:{ detail:detail resolver }
]从@角度/核心导入{内射};
从" @angular/router "导入{ Resolve,ActivatedRouteSnapshot,RouterStateSnapshot }。
@ injectable({在: root })中提供)
导出类详细解析器实现Resolveany {
构造函数(){ }
resolve(route:ActivatedRouteSnapshot,state:RouterStateSnapshot):any {
返回新承诺((解决,拒绝)={
setTimeout(()={
解决(“解析数据");
}, 3000);
})
}
}已解决的组件获取分解的值
构造函数(私有路由:ActivatedRoute) { }
ngOnInit() {
const detail=this.route快照。数据。细节;
console.log(详细);
}监听路由事件:
构造器(私有路由器:路由器){
这个。路由器。事件。订阅((事件)={
//NavigationEnd,NavigationCancel,NavigationError,RoutesRecognized
导航开始的事件实例){
控制台。日志(“导航开始”);
}
})
}更多编程相关知识,请访问:编程视频!以上就是深入了解有角的中的路由的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。