详解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 相关文章推荐
Ucren Virtual Desktop V2.0
Nov 07 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
Oct 15 Javascript
微信小程序 form组件详解及简单实例
Jan 10 Javascript
javascript 判断一个对象为数组的方法
May 03 Javascript
Javascript中的async awai的用法
May 17 Javascript
Angular2使用Angular CLI快速搭建工程(一)
May 21 Javascript
input输入框内容实时监测(附代码)
Aug 15 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
Aug 17 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
Sep 13 Javascript
详解从Vue-router到html5的pushState
Jul 21 Javascript
浅谈微信小程序flex布局基础
Sep 10 Javascript
Vue根据条件添加click事件的方式
Nov 09 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边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
js页面跳转的常用方法整理
2013/10/18 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
2014/09/01 Javascript
js基于cookie记录来宾姓名的方法
2016/07/19 Javascript
vue实现表格数据的增删改查
2017/07/10 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
[01:04:05]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
python中数据库like模糊查询方式
2020/03/02 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
html5的canvas方法使用指南
2014/12/15 HTML / CSS
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
企业门卫岗位职责
2013/12/12 职场文书
高校辅导员推荐信范文
2013/12/25 职场文书
学校庆元旦歌咏比赛主持词
2014/03/18 职场文书
2014年社会实践活动总结范文
2014/04/29 职场文书
大班上学期幼儿评语
2014/04/30 职场文书
委托培训协议书
2014/11/17 职场文书
亲属关系公证书样本
2015/01/23 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
工资证明格式模板
2015/06/12 职场文书
酒店温馨提示语
2015/07/14 职场文书
导游词之台湾阿里山
2019/10/23 职场文书