想学会angular4x建议看看这个https://segmentfault.com/a/1190000008754631
<https://segmentfault.com/a/1190000008754631>入门教程,以下是工作中的总结:
一、路由
1、Routes
路由配置,保存着哪个URL对应展示哪个组件,以及在哪个RouterOutlet中展示组件
2、RouterOutlet
在Html中标记路由内容呈现位置的占位符指令
3、Router
负责在运行时执行路由的对象,可以通过调用其navigate()和navigateByUrl()方法来导航到一个指定的路由
4、RouterLink
在Html中声明路由导航用的指令
5、ActivatedRoute
当前激活的路由对象,保存着当前路由的信息,如路由地址,路由参数等
import { Router, ActivatedRoute, Params } from '@angular/router';
snapshot --- 参数快照
subscribe ----参数订阅
constructor(
private route: ActivatedRoute,
private router: Router,
) { }
第一种:查询参数中
跳转路由:
<a [routerLink]="['/product']" [queryParams]="{id:1}">商品</a> ?问号;号
this.router.navigate(['login', 1],{ queryParams: { id: 1 } });
获取参数
this.route.snapshot.queryParams["id"]
第二种:路由中
{ path: '/profile/:id', component: ProfileComponent }
获取参数:
this.route.snapshot.params["id"]
this.router.params.subscribe((params:Params) => this.id = params.id);
1.以根路由跳转/login
this.router.navigate(['login']);
2.设置relativeTo相对当前路由跳转,route是ActivatedRoute的实例,使用需要导入ActivatedRoute
this.router.navigate(['login', 1],{relativeTo: route});
3.路由中传参数 /login?name=1
this.router.navigate(['login', 1],{ queryParams: { name: 1 } });
4.preserveQueryParams默认值为false,设为true,保留之前路由中的查询参数/login?name=1 to /home?name=1
this.router.navigate(['home'], { preserveQueryParams: true });
5.路由中锚点跳转 /home#top
this.router.navigate(['home'],{ fragment: 'top' });
6.preserveFragment默认为false,设为true,保留之前路由中的锚点/home#top to /role#top
this.router.navigate(['/role'], { preserveFragment: true });
7.skipLocationChange默认为false,设为true,路由跳转时浏览器中的url会保持不变,但是传入的参数依然有效
this.router.navigate(['/home'], { skipLocationChange: true });
8.replaceUrl默认为true,设为false,路由不会进行跳转
this.router.navigate(['/home'], { replaceUrl: true });
###辅助路由
插座 outlet
思路:
1、在APP组件的模板上再定义一个插座来显示聊天面板
2、单独开发一个聊天室组件,只显示在新定义的插座上
3、通过路由参数控制新插座是否显示聊天面板
###路由守卫
CanActive : 处理导航到某路由的情况
CanActivateChild:处理导航到某子路由的情况
CanDeactivate:处理从当前路由离开的情况
Resolve:在路由激活之前获取路由数据
CanLoad:处理异步导航到某特性模块的情况
注意事项
1、 <base> 标签添加到我们的 index.html 文件
2、根模块中使用 forRoot(),子模块中使用 forChild()
3、使用一个名为 router-outlet 的指令告诉 Angular 在哪里加载组件
4、动态路由 { path: '/profile/:username', component: ProfileComponent }
另一个很有用的路由功能是 component-less 路由:
https://segmentfault.com/a/1190000009265310
* 使用 component-less 路由允许我们将路由组合在一起,并让它们共享路由配置信息和 outlet。
* 需要注意的是,我们没有将 SettingsModule 导入到我们的 AppModule 中,而是通过 loadChildren 属性,告诉
Angular 路由依据 loadChildren 属性配置的路径去加载 SettingsModule 模块。这就是模块懒加载功能的具体应用,当用户访问
/settings/** 路径的时候,才会加载对应的 SettingsModule 模块,这减少了应用启动时加载资源的大小。
数据绑定:
output:
热门工具 换一换