详解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 相关文章推荐
[原创]js获取数组任意个不重复的随机数组元素
Mar 15 Javascript
JS Replace 全部替换字符的用法小结
Dec 24 Javascript
jQuery中[attribute]选择器用法实例
Dec 31 Javascript
js, jQuery实现全选、反选功能
Mar 08 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
Sep 12 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
Jan 15 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
Apr 01 Javascript
jQuery简单判断值是否存在于数组中的方法示例
Apr 17 jQuery
vue新vue-cli3环境配置和模拟json数据的实例
Sep 19 Javascript
js实现无缝滚动双图切换效果
Jul 09 Javascript
ant-design-vue 快速避坑指南(推荐)
Jan 21 Javascript
vue 通过 Prop 向子组件传递数据的实现方法
Oct 30 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
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
编辑浪子版表单验证类
2007/05/12 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
JavaScript中的splice方法用法详解
2016/07/20 Javascript
原生JS实现图片轮播切换效果
2016/12/15 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
js实现canvas图片与img图片的相互转换的示例
2017/08/31 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
ES6函数实现排它两种写法解析
2020/05/13 Javascript
详解js中的几种常用设计模式
2020/07/16 Javascript
[02:47]DOTA2英雄基础教程 野性怒吼兽王
2013/12/05 DOTA
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
基于python 处理中文路径的终极解决方法
2018/04/12 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
python3中rank函数的用法
2019/11/27 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
Django-imagekit的使用详解
2020/07/06 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
戴森美国官网:Dyson美国
2016/09/11 全球购物
保护环境建议书400字
2014/05/13 职场文书
学校周年庆活动方案
2014/08/22 职场文书
幼师中班个人总结
2015/02/12 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL
用python实现监控视频人数统计
2021/05/21 Python
python字典的元素访问实例详解
2021/07/21 Python
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL