详解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 相关文章推荐
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
Jun 26 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
Nov 19 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
Nov 26 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
Dec 19 Javascript
javascript复制粘贴与clipboardData的使用
Oct 16 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
Oct 30 Javascript
node.js中的buffer.Buffer.isEncoding方法使用说明
Dec 14 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
Jan 14 Javascript
BootStrap中Datepicker控件带中文的js文件
Aug 10 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
Apr 08 Javascript
Vue实现页面添加水印功能
Nov 09 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
May 30 jQuery
浅谈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
javascript,php获取函数参数对象的代码
2011/02/03 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
2012/07/31 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
几个javascript操作word的参考代码
2009/10/26 Javascript
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
使用Java实现简单的server/client回显功能的方法介绍
2013/05/03 Javascript
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
jQuery读取XML文件的方法示例
2017/02/03 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
vue.js开发环境搭建教程
2017/05/04 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
python多线程实现TCP服务端
2019/09/03 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
Lookfantastic日本官网:英国知名护肤、化妆品和头发护理购物网站
2018/04/21 全球购物
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
什么是ESB?请介绍一下ESB?
2015/05/27 面试题
初一生物教学反思
2014/01/18 职场文书
个人承诺书
2014/03/26 职场文书
奥林匹克运动会口号
2014/06/19 职场文书
先进工作者推荐材料
2014/12/23 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
学习焦裕禄先进事迹心得体会
2016/01/23 职场文书