详解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 相关文章推荐
JavaScript 入门·JavaScript 具有全范围的运算符
Oct 01 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
Apr 14 Javascript
IE之动态添加DOM节点触发window.resize事件
Jul 27 Javascript
js验证是否为数字的总结
Apr 14 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
May 07 Javascript
javascript 获取网页标题代码实例
Jan 22 Javascript
js动态控制table的tr、td增加及删除的具体实现
Apr 30 Javascript
vue环境搭建简单教程
Nov 07 Javascript
vue实现购物车抛物线小球动画效果的方法详解
Feb 13 Javascript
koa大型web项目中使用路由装饰器的方法示例
Apr 02 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
Nov 04 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
Jun 01 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
PHP4中实现动态代理
2006/10/09 PHP
PHP设置进度条的方法
2015/07/08 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
JavaScript OOP类与继承
2009/11/15 Javascript
JavaScript常用全局属性与方法记录积累
2013/07/03 Javascript
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
解析JavaScript中点号“.”的多义性
2013/12/02 Javascript
JQuery实现级联下拉框效果实例讲解
2015/09/17 Javascript
JavaScript计划任务后台运行的方法
2015/12/18 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
Vue项目安装插件并保存
2019/01/28 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
[47:26]完美世界DOTA2联赛 LBZS vs Forest 第二场 11.07
2020/11/09 DOTA
Python中的filter()函数的用法
2015/04/27 Python
Python函数式编程
2017/07/20 Python
python实现求解列表中元素的排列和组合问题
2018/03/15 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
python实现汉诺塔算法
2021/03/01 Python
python中property和setter装饰器用法
2019/12/19 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
用canvas显示验证码的实现
2020/04/10 HTML / CSS
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
毕业生的自我评价
2013/12/30 职场文书
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记