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 相关文章推荐
在IE下:float属性会影响offsetTop的取值
Dec 22 Javascript
三种取消选中单选框radio的方法
Sep 09 Javascript
详解JavaScript中的Unescape()和String() 函数
Nov 09 Javascript
深入浅析JavaScript中的作用域和上下文
Mar 26 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
Jun 13 Javascript
原生JS实现首页进度加载动画
Sep 14 Javascript
jquery 实现回车登录详解及实例代码
Oct 23 Javascript
基于javascript 显式转换与隐式转换(详解)
Dec 15 Javascript
javascript获取图片的top N主色值方法详解
Jan 26 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
Oct 23 Javascript
vue组件添加事件@click.native操作
Oct 30 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
Nov 05 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
怎么使 Mysql 数据同步
2006/10/09 PHP
php下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
php防止网站被攻击的应急代码
2015/10/21 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
浅析Prototype的模板类 Template
2011/12/07 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
最全的Javascript编码规范(推荐)
2016/06/22 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
jquery自定义表单验证插件
2016/10/12 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
详解jQuery插件开发方式
2016/11/22 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
2017/08/18 jQuery
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
Vue微信项目按需授权登录策略实践思路详解
2018/05/07 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
Python自动发送邮件的方法实例总结
2018/12/08 Python
Python爬虫文件下载图文教程
2018/12/23 Python
python实现证件照换底功能
2019/08/20 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
redis中lua脚本使用教程
2021/11/01 Redis
Python OpenCV实现图像模板匹配详解
2022/04/07 Python
Python使用Web框架Flask开发项目
2022/06/01 Python