Angular 多级路由实现登录页面跳转(小白教程)


Posted in Javascript onNovember 19, 2019

本文受众是 Angular 初学者,没有多级路由使用经验,不知道登录页面与主页跳转的实现逻辑,相反,看到这里你就可以结束了,不要浪费时间。下面来看看小白对于登录页面的理解:

Angular 多级路由实现登录页面跳转(小白教程)

上图中左边是导航菜单栏,右边的空白区域是 <router-outlet> 所在区域,即所有实现业务逻辑的组件都在这里显示 - 点击左边导航栏的项目右侧B区域就替换为对应的页面,那么问题来了,登录页面要怎么做?

多级路由实现图

Angular 多级路由实现登录页面跳转(小白教程)

图有点大,看不清楚的放大点看吧。看了这个图相信一部分人已经懂了实现原理了。如果还是不懂,来看下面的文字讲解。

实现原理讲解

本文案例以 Angular + ng-zorro-antd 来讲解,如果使用了别的UI套件也没关系,原理都是一样的

  • 使用命令 ng new logindemo 创建项目
  • 在命令行界面使用 cd 切换当前路径为上面创建的项目的根目录下
  • 使用命令 ng add ng-zorro-antd 向项目中添加UI套件
  • 此时运行起来后大致就是本文的第一个图片的显示效果:左边是导航菜单,右边是变换显示业务组件的区域
  • 那么小白走到这里就被误导了,产生了本文初的疑惑,下面开始来解扣了。

项目创建好了,下面介绍改造项目的步骤:

注释掉文件 app.component.html 中的全部代码,并且添加一行:<router-outlet></router-outlet>

创建布局组件 layout ,将文件 app.component.html 中被注释的代码拷贝来,那么本组件的效果就是本文的第一个图片的布局效果了。拷贝来的代码中自带了路由插槽 <router-outlet></router-outlet> 那么到本页面中的路由插槽实际就是二级路由了。二级路由的代码如下:

const routes: Routes = [
 { 
  path:'',component:LayoutComponent,canActivate:[LayoutGuard],
  children:[
   { path: 'dbManager',loadChildren: () => 
    import('../dbmanager/dbmanager.module').then(m => m.DbmanagerModule) },

   { path: 'generateTree',loadChildren: () => 
    import('../gentree/gentree.module').then(m => m.GentreeModule) }
  ] 
 }
];

本组件的超链接中路径写法:<a routerLink="dbManager" >数据库管理器</a>,之前创建项目时的默认写法是:<a routerLink="/dbManager" >数据库管理器</a>,即只是去掉了 dbManager 前面的斜线。

那么在文件 app.component.ts 组件关联的路由文件 app-routing.module.ts 中的路由代码如下:

const routes: Routes = [
 { path: '', pathMatch: 'full', redirectTo: '/layout' },
 { path: 'login', loadChildren: () => 
  import('./pages/login/login.module').then(m => m.LoginModule) },
 { path: 'layout',loadChildren: () => 
  import('./pages/layout/layout.module').then(m => m.LayoutModule)}
];

这里的路由设置表示,当访问项目的空路径 localhost:4200 时会自动导航到组件 layout ,又由于该组件有路由守卫,如果没有登录那么会被转发到登录组件 login ,这个路由守卫是写在组件 layout 中的路由文件中的。当正常登录状态下打开组件 layout 的页面时就达到了本文的第一个图片的效果,右侧显示业务逻辑组件的页面。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
CSS和JS标签style属性对照表(方便js开发的朋友)
Nov 11 Javascript
php实例分享之实现显示网站运行时间
May 20 Javascript
jQuery通过Ajax返回JSON数据
Apr 28 Javascript
基于jQuery的ajax方法封装
Jul 14 Javascript
jQuery层次选择器用法示例
Sep 09 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
Dec 12 Javascript
node中koa中间件机制详解
Aug 22 Javascript
javascript实现获取中文汉字拼音首字母
May 19 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
Jul 21 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
Aug 13 Javascript
快速解决element的autofocus失效问题
Sep 08 Javascript
vue watch监控对象的简单方法示例
Jan 07 Vue.js
nodemon实现Typescript项目热更新的示例代码
Nov 19 #Javascript
vue的三种图片引入方式代码实例
Nov 19 #Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
Nov 19 #Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
Nov 19 #Javascript
VUEX-action可以修改state吗
Nov 19 #Javascript
Vue.extend 编程式插入组件的实现
Nov 18 #Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
Nov 18 #Javascript
You might like
php中显示数组与对象的实现代码
2011/04/18 PHP
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
ExtJs使用总结(非常详细)
2012/03/22 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
禁止拷贝网页内容的js代码
2014/01/22 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
jQuery常用选择器详解
2017/07/17 jQuery
实例解析Vue.js下载方式及基本概念
2018/05/11 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
js实现提交前对列表数据的增删改查
2020/01/16 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
python解析xml文件实例分享
2013/12/04 Python
python根据出生日期获得年龄的方法
2015/03/31 Python
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
keras多显卡训练方式
2020/06/10 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
PyQt 如何创建自定义QWidget
2021/03/24 Python
房地产促销活动方案
2014/03/01 职场文书
基督教婚礼主持词
2014/03/14 职场文书
大学生社会实践方案
2014/05/11 职场文书
老兵退伍感言
2015/08/03 职场文书
高中化学教学反思
2016/02/22 职场文书
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL