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 相关文章推荐
Javascript 去除数组的重复元素
May 04 Javascript
jQuery插件的写法分享
Jun 12 Javascript
浅谈checkbox的一些操作(实战经验)
Nov 20 Javascript
javascript的解析执行顺序在各个浏览器中的不同
Mar 17 Javascript
js动态创建标签示例代码
Jun 09 Javascript
JS的location.href跳出框架打开新页面的方法
Sep 04 Javascript
jQuery实现html元素拖拽
Jul 21 Javascript
JavaScript正则表达式匹配 div  style标签
Mar 15 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
Mar 09 Javascript
TypeScript入门-接口
Mar 30 Javascript
详解React native全局变量的使用(跨组件的通信)
Sep 07 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
May 08 Javascript
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读取txt文本文件并分页显示的方法
2015/03/11 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
ajax java 实现自动完成功能
2012/12/19 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
jquery获取radio值实例
2014/10/16 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
Python3 log10()函数简单用法
2019/02/19 Python
django框架基于模板 生成 excel(xls) 文件操作示例
2019/06/19 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
html5将图片转换成base64的实例代码
2016/09/21 HTML / CSS
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
德国的各种媒体在线商店:Thalia.de(书籍、电子书、玩具等)
2020/10/08 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
如何开发一个JQuery插件
2016/07/28 面试题
岗位竞聘演讲稿
2014/01/10 职场文书
关于观后感的作文
2015/06/18 职场文书
幼儿园六一主持词
2015/06/30 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书