详解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 相关文章推荐
DOM相关内容速查手册
Feb 07 Javascript
Prototype中dom对象方法汇总
Sep 17 Javascript
JavaScript调用Activex控件的事件的实现方法
Apr 11 Javascript
jsonp原理及使用
Oct 28 Javascript
深入解读JavaScript中的Hoisting机制
Aug 12 Javascript
浅析Bootstrap组件之面板组件
May 04 Javascript
jQuery使用ajax跨域获取数据的简单实例
May 18 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
Jun 12 Javascript
Javascript中级语法快速入手
Jul 30 Javascript
微信小程序时间控件picker view使用详解
Dec 28 Javascript
javascript实现京东快递单号的查询效果
Nov 30 Javascript
element-ui封装一个Table模板组件的示例
Jan 04 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面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
图解找出PHP配置文件php.ini的路径的方法
2014/08/20 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
Prototype 学习 Prototype对象
2009/07/12 Javascript
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
再谈Javascript中的异步以及如何异步
2016/08/19 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
bootstrap suggest搜索建议插件使用详解
2017/03/25 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
如何通过javaScript去除字符串两端的空白字符
2020/02/06 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
2020/03/26 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
python爬取m3u8连接的视频
2018/02/28 Python
python编程使用协程并发的优缺点
2018/09/20 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
2019/08/13 Python
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
幼儿园门卫制度
2014/01/29 职场文书
幼儿园教师工作感言
2014/02/15 职场文书
《金子》教学反思
2014/04/13 职场文书
护士医德医风自我评价
2014/09/15 职场文书
教师节主题班会方案
2015/08/17 职场文书
python实现高效的遗传算法
2021/04/07 Python