详解Angular4 路由设置相关


Posted in Javascript onAugust 26, 2017

1.路由相关配置

路由类设置

/*路由基本模型*/

/*导入RouterModule,Routes类型*/
import { RouterModule, Routes } from '@angular/router';
import { LoginComponent } from "./login/login.component";

/*定义路由const表示不可改变*/
const routers: Routes = [
 /*
  path:字符串,表示默认登入,
  path为路径 /login component:组件
  component:组件
  pathMatch:为字符串默认为前缀匹配 "prefix"; "full" 为完全匹配。
  redirectTo:指向为路径,既path
  outlet:字符串,路由目标,面对多个路由的情况
  children:Routes 子路由相关
  */
 { path: '', component: LoginComponent },
 // path:路径 /detail/1 :id代表参数相关
 { path: 'detail/:id', component: LoginComponent },
 // 懒加载子模块, 子模块需要配置路由设置启动子组件,如果这样设置了路由,需要在子模块中再定义路由
 { path: 'other', loadChildren:"./demo/demo.module#demoModule" },
 // 重定向,路径为** 表示不能识别的路径信息,重定向到相关路径下
 { path: '**', pathMatch: 'full', redirectTo: '' }
];

/*将路由设置导出,子模块中的路由使用 forChild 而不是 forRoot*/
export const appRouter = RouterModule.forRoot(routers);

ngModule设置

@NgModule({
 declarations: [
 ......
 ],
 imports: [
 ......
  appRouter
 ]
})

组件模板设置

<router-outlet></router-outlet>

2.多路由处理

{ path: 'news', outlet: 'let1', component: NewsComponent },
{ path: 'news', outlet: 'let2', component: News2Cmponent },
//模板中
<router-outlet name="let1"></router-outlet>
<router-outlet name="let2"></router-outlet>

访问 /news/ 时同时加载 NewsComponent News2Cmponent 两个组件

3.路有链接以及组件中调用路由方法使用

<a routerLink="/detail/1" routerLinkActive="active">detail</a>
<a [routerLink]="['/detail', news.id]">{{news.title}}</a>
<a [routerLink]="[{ outlets: { let2: ['news'] } }]">Contact</a>

routerLinkActive="active" 即在本路由激活时添加样式 .active

或者:

this.router.navigate(['/detail', this.news.id])
this.router.navigate([{ outlets: { let2: null }}]);

其中:navigateByUrl 方法指向完整的绝对路径

4.路由守卫(适用于后台管理等需要登录才能使用的模块)

import { Injectable }   from '@angular/core';
import { CanActivate }  from '@angular/router';

@Injectable()
export class AuthService implements CanActivate {
 canActivate() {
  // 这里判断登录状态, 返回 true 或 false
  return true;
 }
}

在路由配置中的设置

{ path: '', component: LoginComponent, canActivate:[LoginComponent] },

5.退出守卫(适合于编辑器修改后的保存提示等场景)

import { Injectable }   from '@angular/core';
import { CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot }  from '@angular/router';

// CanDeactivateComponent 是定义的接口,见下段代码
import { CanDeactivateComponent } from './can-deactivate.omponent';

@Injectable()
export class DeacService implements CanDeactivate<CanDeactivateComponent> {
 canDeactivate(
  canDeactivateComponent: CanDeactivateComponent,
  activatedRouteSnapshot: ActivatedRouteSnapshot,
  routerStateSnapshot: RouterStateSnapshot
 ) {
  // 目标路由和当前路由
  console.log(activatedRouteSnapshot);
  console.log(routerStateSnapshot);

  // 判断并返回
  return canDeactivateComponent.canDeactivate ? canDeactivateComponent.canDeactivate() : true

 }
}

..

// 接口组件, 返回 true 或 false 如表单发生改变则调用对话框服务
export interface CanDeactivateComponent {
 canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
}

路由配置

{
 path: ...,
 canDeactivate: [DeacService],
  component: ...
}

模块中添加服务

providers: [
 DeactivateGuardService
]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
改进版通过Json对象实现深复制的方法
Oct 24 Javascript
详解js闭包
Sep 02 Javascript
jQuery验证插件 Validate详解
Nov 20 Javascript
分享10个优化代码的CSS和JavaScript工具
May 11 Javascript
Angular17之Angular自定义指令详解
Jan 21 Javascript
基于vue展开收起动画的示例代码
Jul 05 Javascript
微信小程序画布圆形进度条显示效果
Nov 17 Javascript
mpvue写一个CPASS小程序的示例
Sep 04 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
Dec 06 Javascript
node全局变量__dirname与__filename的区别
Jan 14 Javascript
详解一个基于react+webpack的多页面应用配置
Jan 21 Javascript
vue引用外部JS的两种种方法
Jan 28 Javascript
浅谈Angular路由守卫
Aug 26 #Javascript
javascript实现文字无缝滚动效果
Aug 26 #Javascript
node实现定时发送邮件的示例代码
Aug 26 #Javascript
详解webpack3如何正确引用并使用jQuery库
Aug 26 #jQuery
get  post jsonp三种数据交互形式实例详解
Aug 25 #Javascript
详解vue 模拟后台数据(加载本地json文件)调试
Aug 25 #Javascript
浅谈JS获取元素的N种方法及其动静态讨论
Aug 25 #Javascript
You might like
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
php封装的smarty类完整实例
2016/10/19 PHP
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
Jquery 切换不同图片示例代码
2013/12/05 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
2013/12/16 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
bootstrap flask登录页面编写实例
2016/11/01 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
Python EOL while scanning string literal问题解决方法
2020/09/18 Python
pandas.DataFrame.to_json按行转json的方法
2018/06/05 Python
python assert的用处示例详解
2019/04/01 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
Python中的__init__作用是什么
2020/06/09 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
C语言面试题
2015/10/30 面试题
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
企业承诺书格式
2014/05/21 职场文书
小城镇建设汇报材料
2014/08/16 职场文书
奥巴马上海演讲稿
2014/09/10 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
2015年专项整治工作总结
2015/04/03 职场文书
社区党务工作总结2015
2015/05/19 职场文书
python flappy bird小游戏分步实现流程
2022/02/15 Python
使用HBuilder制作一个简单的HTML5网页
2022/07/07 HTML / CSS