百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Angular9+Ant构建一个后台管理系统(三)

ccwgpt 2024-10-04 14:05 30 浏览 0 评论

1. 前言

上一节中我们学会了安装TypeScript支持,以及创建了一个基本的Angular工程。并尝试启动了工程,看到了首页。

本节内容中,我们要学会做我们的第一个页面,登录页面。

同时我们要学会集成我们使用的UI框架Ant Design For Angular,NG-ZORRO

2. 集成NG-ZORRO

2.1. NG-ZORRO简介

Ant Design :源自蚂蚁金服体验技术部的后台产品开发,蚂蚁金服的设计师和前端工程师经过大量的项目实践和总结,抽象出的一套企业级的交互视觉规范,统一后台项目的前端 UI 设计,屏蔽各种不必要的设计差异和前端实现成本,解放设计和前端开发资源。Ant Design提供了对Angular、Vue、React等前端框架的支持。

NG-ZORRO:是遵循 Ant Design 设计规范的 Angular UI 组件库,主要用于研发企业级中后台产品。全部代码开源并遵循 MIT 协议,任何企业、组织及个人均可免费使用。

官方网站可参考:https://ng.ant.design/docs/introduce/zh

2.2. NG-ZORRO安装

1、自动安装

只需要进入我们的工程目录,执行如下命令即可:

ng add ng-zorro-antd

VSCode中,步骤如下:

选择菜单栏中的终端(Terminal) - 新建终端(New Terminal),然后在新的终端窗口中输入上面的命令即可。

安装时会有选项提示,根据需要选择即可。

这样会自动安装成功NG-ZORRO。

我们可以启动工程看一下:

已经为我们配置了一个欢迎主页面,使用了侧边栏,而且侧边边栏是可以自动收缩的。

2、我们也可以手动安装NG-ZORRO

首先,在工程目录下,执行安装组件命令:

npm install ng-zorro-antd --save

接着,我们引用样式:

angular.json 中引入:

{
  "styles": [
    "node_modules/ng-zorro-antd/ng-zorro-antd.min.css"
  ]
}

style.css 中引入预构建样式文件:

@import "~ng-zorro-antd/ng-zorro-antd.min.css";

最后,我们想使用哪个组件模块,就在app.module.ts中引入就可以使用了。举个例子,我们要使用按钮组件,需要引入NzButtonModule:

import { NgModule } from '@angular/core';
import { NzButtonModule } from 'ng-zorro-antd/button';
import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    NzButtonModule
  ]
})
export class AppModule { }

然后在模板中使用:

<button nz-button nzType="primary">Primary</button>

3. 制作登录页面

3.1. 引入NG-ZORRO的Form表单组件

登录页面主要显示的都是表单,因此需要引入表单组件,在app.module.ts文件中增加如下部分代码:

import { NzFormModule } from 'ng-zorro-antd/form';
import { NzButtonModule } from 'ng-zorro-antd/button';
import { NzInputModule } from 'ng-zorro-antd/input';
import { NzCheckboxModule } from 'ng-zorro-antd/checkbox';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    NzFormModule,
    NzButtonModule,
    NzInputModule,
    NzCheckboxModule
  ]
})
export class AppModule { }

上述代码中忽略了 既有的其他代码。我们只需要导入包:

import { NzFormModule } from 'ng-zorro-antd/form';
import { NzButtonModule } from 'ng-zorro-antd/button';
import { NzInputModule } from 'ng-zorro-antd/input';
import { NzCheckboxModule } from 'ng-zorro-antd/checkbox';

然后在@NgModule 的 imports属性中,增加NzFormModule、NzButtonModule、NzInputModule、 NzCheckboxModule即可。

3.2. 使用脚手架创建登录页面

切换到我们工程下的pages目录,完整路径:src/app/pages/。我们所有的页面都会放在这个目录下维护。

然后输入如下命令,创建login组件:

ng generate component login

全过程如下:

PS D:\ECMS\ecms-web\src\app\pages> ng generate component login
More than one module matches. Use skip-import option to skip importing the component into the closest module.
PS D:\ECMS\ecms-web\src\app\pages> ng generate component login --skip-import
CREATE src/app/pages/login/login.component.html (20 bytes)
CREATE src/app/pages/login/login.component.spec.ts (621 bytes)
CREATE src/app/pages/login/login.component.ts (271 bytes)
CREATE src/app/pages/login/login.component.css (0 bytes)
PS D:\ECMS\ecms-web\src\app\pages> 

第一次执行ng generate component login命令时提示More than one module matches,我们只需要加入--skip-import 参数即可。

生成的代码如下:

3.3. 创建登录表单

1、在login.component.html中加入如下代码:

<div style="text-align: center; margin: auto">
  <i class="fa fa-superpowers fa-4x" style="color: #40a9ff;"></i><!-- 这里放置LOGO -->
  <span class="align-middle" style="font-size:65px; color:grey;"> ECMS</span>
</div>
<div style="margin: 25px auto auto auto;">
  <form nz-form [formGroup]="validateForm" class="login-form" style="margin: auto;" (ngSubmit)="submitForm()">
    <nz-form-item>
      <nz-form-control nzErrorTip="请输入登录用户名!">
        <nz-input-group nzPrefixIcon="user">
          <input type="text" nz-input formControlName="userName" placeholder="用户名/手机/邮箱" />
        </nz-input-group>
      </nz-form-control>
    </nz-form-item>
    <nz-form-item>
      <nz-form-control nzErrorTip="请输入登录密码!">
        <nz-input-group nzPrefixIcon="lock">
          <input type="password" nz-input formControlName="password" placeholder="密码" />
        </nz-input-group>
      </nz-form-control>
    </nz-form-item>
    <div nz-row class="login-form-margin">
      <div nz-col [nzSpan]="12">
        <label nz-checkbox formControlName="remember">
          <span>记住</span>
        </label>
      </div>
      <div nz-col [nzSpan]="12">
        <a class="login-form-forgot">忘记密码?</a>
      </div>
    </div>
    <button nz-button class="login-form-button login-form-margin" [nzType]="'primary'">登录</button>
    或者 <a> 去注册! </a>
  </form>
</div>

2、在login.component.css中加入如下代码:

.login-form {
  max-width: 300px;
}

.login-form-margin {
  margin-bottom: 16px;
}

.login-form-forgot {
  float: right;
}

.login-form-button {
  width: 100%;c
}

3、在login.component.ts中加入如下代码:

import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';  // 导入构建表单需要的相关组件
import { Router } from '@angular/router'; // 导入Router组件

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {

  validateForm!: FormGroup; // 定义表单组

  constructor(private fb: FormBuilder,
             private router: Router) { } // 注入FormBuilder对象 和Router对象 

  ngOnInit(): void {
    //  构建表单对象
    this.validateForm = this.fb.group({
      userName: [null, [Validators.required]],
      password: [null, [Validators.required]],
      remember: [true]
    });
  }

  // 表单提交
  submitForm(): void {
    for (const i in this.validateForm.controls) {
      this.validateForm.controls[i].markAsDirty();
      this.validateForm.controls[i].updateValueAndValidity();
    }
    // 表单验证失败返回
    if (this.validateForm.invalid) {
      return;
    }

    // 表单验证通过,调用登录逻辑
    // 登录代码忽略
    // 登录成功跳转到welcome 页面
    this.router.navigate(['welcome']);
  }
}

4. 配置路由

我们修改路由把登录页面设置为默认加载页面:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { LoginComponent } from './pages/login/login.component';
import { WelcomeComponent } from './pages/welcome/welcome.component';

const routes: Routes = [
  { path: '', pathMatch: 'full', redirectTo: 'login' }, // 当前网站根
  { path: 'login', component: LoginComponent, data: { title: '登录' } },
  { path: 'welcome', component: WelcomeComponent }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

5. 导入LoginComponent组件

我们修改app.module.ts文件,添加如下的组件引用:

import { LoginComponent } from './pages/login/login.component';
import { WelcomeComponent } from './pages/welcome/welcome.component';

@NgModule({
  declarations: [
    AppComponent
    , LoginComponent
    , WelcomeComponent
  ],
  imports: [
   
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

代码中我忽略了不相干的代码。

6. 启动

我们启动工程来看一下效果:

直接点击登录看一下:

我们随便输入一个用户名和密码,点击登录看看:

成功地跳转到了welcome页面。

7. 小结

本篇教程中我们学习了如何集成NG-ZORRO到Angular工程中,然后我们尝试着,使用NG-ZORRO的表单组件,构建了一个登录页面。并配置了网站的默认页面为登录页面。大家可以看到 使用Angular + NG-ZORRO构建一个前端的网站是如此简单。

相关推荐

自己动手写Android数据库框架_android开发数据库搭建

http://blog.csdn.net/feiduclear_up/article/details/50557590推荐理由关于Android数据库操作,由于每次都要自己写数据库操作,每次还得去...

谷歌开源大模型评测工具LMEval,打通谷歌、OpenAI、Anthropic

智东西编译|金碧辉编辑|程茜智东西5月28日消息,据科技媒体TheDecoder5月26日报道,当天,谷歌正式发布开源大模型评测框架LMEval,支持对GPT-4o、Claude3.7...

工信部:着力推动大模型算法、框架等基础性原创性的技术突破

工信部新闻发言人今日在发布会上表示,下一步,我们将坚持突出重点领域,大力推动制造业数字化转型,推动人工智能创新应用。主要从以下四个方面着力。一是夯实人工智能技术底座。通过科技创新重大项目,着力推动大模...

乒乓反复纠结“框架不稳定”的三个小误区

很多球友由于对框架的认知不清晰,往往会把“框架不稳定”当成一种心理负担,从而影响学球进度,其典型状态就是训练中有模有样,一旦进入实战,就像被捆住了手脚。通过训练和学习,结合“基本功打卡群”球友们交流发...

前AMD、英特尔显卡架构师Raja再战GPU,号称要全面重构堆栈

IT之家8月5日消息,知名GPU架构师拉贾科杜里(RajaKoduri)此前曾先后在AMD和英特尔的显卡部门担任要职。而在今日,由Raja创立的GPU软件与IP初创企...

三种必须掌握的嵌入式开发程序架构

前言在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构清晰,并且便于开发。我相...

怪不得别人3秒就知道软考案例怎么做能50+

软考高级统一合格标准必须三科都达到45分,案例分析也一直是考生头疼的一门,但是掌握到得分点,案例能不能50+还不是你们说了算吗?今天就结合架构案例考点,分享实用的备考攻略~一、吃透考点,搭建知识框架从...

UML统一建模常用图有哪些,各自的作用是什么?一篇文章彻底讲透

10万+爆款解析:9大UML图实战案例,小白也能秒懂!为什么需要UML?UML(统一建模语言)是软件开发的“蓝图”,用图形化语言描述系统结构、行为和交互,让复杂需求一目了然。它能:降低沟通成本避...

勒索软件转向云原生架构,直指备份基础设施

勒索软件组织和其他网络犯罪分子正越来越多地将目标对准基于云的备份系统,对久已确立的灾难恢复方法构成了挑战。谷歌安全研究人员在一份关于云安全威胁演变的报告中警告称,随着攻击者不断改进数据窃取、身份泄露和...

ConceptDraw DIAGRAM:释放创意,绘就高效办公新未来

在当今数字化时代,可视化工具已成为提升工作效率和激发创意的关键。ConceptDrawDIAGRAM,作为一款世界顶级的商业绘图软件,凭借其强大的功能和用户友好的界面,正逐渐成为众多专业人士的首选绘...

APP 制作界面设计教程:一步到位_app界面设计模板一套

想让APP界面设计高效落地,无需繁琐流程,掌握“框架搭建—细节填充—体验优化”三步法,即可一步到位完成专业级设计。黄金框架搭建是基础。采用“三三制布局”:将屏幕横向三等分,纵向保留三...

MCP 的工作原理:关键组件_mcp部件

以下是MCP架构的关键组件:MCP主机:像ClaudeDesktop、GitHubCopilot或旅行助手这样的AI智能体,它们希望通过MCP协议访问工具、资源等。MCP主机会...

软件架构_软件架构师工资一般多少

软件架构师自身需要是程序员,并且必须一直坚持做一线程序员。软件架构应该是能力最强的一群程序员,他们通常会在自身承接编程任务的同时,逐渐引导整个团队向一个能够最大化生产力的系统设计方向前进。软件系统的架...

不知不觉将手机字体调大!老花眼是因为“老了吗”?

现在不管是联系、交友,还是购物,都离不开手机。中老年人使用手机的时间也在逐渐加长,刷抖音、看短视频、发朋友圈……看手机的同时,人们也不得不面对“视力危机”——老花眼,习惯眯眼看、凑近看、瞪眼看,不少人...

8000通用汉字学习系列讲座(第046讲)

[表声母字]加(续)[从声汉字]伽茄泇迦枷痂袈笳嘉驾架咖贺瘸(计14字)嘉[正音]标准音读jiā。[辨形]上下结构,十四画。会意形声字,从壴从加,加也表声。注:从壴,字义与鼓乐有关;从加,字义与...

取消回复欢迎 发表评论: