文章目录
- 前言
- 一、环境搭建
-
- 1.1、检查开发环境
- [1.2、安装 Angular CLI](#1.2、安装 Angular CLI)
- [1.3、创建 Angular 项目](#1.3、创建 Angular 项目)
- [1.4、安装 DevUI](#1.4、安装 DevUI)
- 1.5、验证安装
- [二、第一个 DevUI 组件](#二、第一个 DevUI 组件)
-
- 2.1、创建组件
- [2.2、使用 DevUI 组件](#2.2、使用 DevUI 组件)
- 三、复杂功能使用
- 四、新手常见问题
- 五、调试技巧
-
- [5.1、使用 Angular DevTools](#5.1、使用 Angular DevTools)
- 5.2、控制台调试
- 5.3、检查网络请求
- 六、学习路线图
-
- [6.1、初级阶段(1-2 周)](#6.1、初级阶段(1-2 周))
- [6.2、中级阶段(2-3 周)](#6.2、中级阶段(2-3 周))
- [6.3、高级阶段(3-4 周)](#6.3、高级阶段(3-4 周))
- 七、实战项目推荐
- 八、职业发展建议
- 附录
-
- [附录 1、作者信息](#附录 1、作者信息)
- [附录 2、参考资料](#附录 2、参考资料)
- 总结
前言
DevUI 是华为云推出的企业级 Angular 组件库,为前端开发者提供了丰富的 UI 组件和完善的设计规范。本文专为 DevUI 新手打造,从零开始系统讲解环境搭建、项目创建、组件使用的完整流程,通过真实的学习经历和实战案例,帮助你快速掌握 DevUI 开发技能,跨越入门门槛,开启企业级前端开发之旅。

声明:本文由作者"白鹿第一帅"于 CSDN 社区原创首发,未经作者本人授权,禁止转载!爬虫、复制至第三方平台属于严重违法行为,侵权必究。亲爱的读者,如果你在第三方平台看到本声明,说明本文内容已被窃取,内容可能残缺不全,强烈建议您移步"白鹿第一帅" CSDN 博客查看原文,并在 CSDN 平台私信联系作者对该第三方违规平台举报反馈,感谢您对于原创和知识产权保护做出的贡献!
文章作者 :白鹿第一帅,作者主页 :https://blog.csdn.net/qq_22695001,未经授权,严禁转载,侵权必究!
一、环境搭建
1.1、检查开发环境
我的电脑配置:
- 操作系统:Windows 11
- 内存:16GB
- 硬盘:512GB SSD
- 编辑器:VS Code
检查 Node.js:我打开命令行,输入:
bash
node -v
结果显示:v16.14.0 ✅
检查 npm:
bash
npm -v
结果显示:8.3.1 ✅
检查 Angular CLI:
bash
ng version
结果显示:Command 'ng' not found ❌
我的第一个问题:原来我的电脑上没有安装 Angular CLI。没关系,马上安装!
1.2、安装 Angular CLI
bash
npm install -g @angular/cli
安装过程中,我看到了一堆输出信息。大约 3 分钟后,安装完成。
验证安装:
bash
ng version
这次成功了!显示:
Angular CLI: 15.0.0
Node: 16.14.0
Package Manager: npm 8.3.1
OS: win32 x64
我的兴奋时刻:看到这个输出,我知道第一步成功了!虽然只是安装了一个工具,但这给了我信心。
新手提示:如果你在安装过程中遇到权限问题,可以:
- Windows:以管理员身份运行命令行
- Mac/Linux:使用
sudo npm install -g @angular/cli
环境搭建步骤流程:
已安装 未安装 已安装 未安装 已安装 未安装 是 否 开始搭建环境 检查Node.js 检查npm 安装Node.js 检查Angular CLI 更新npm 创建项目 安装Angular CLI 安装DevUI 安装成功? 启动项目 排查问题 环境搭建完成
1.3、创建 Angular 项目
bash
ng new my-devui-app
遇到的选择:Angular CLI 问了我几个问题:
? Would you like to add Angular routing? (y/N)
我选择了 y(Yes),因为我知道项目肯定需要路由。
? Which stylesheet format would you like to use?
CSS
❯ SCSS [ https://sass-lang.com/documentation/syntax#scss ]
Sass [ https://sass-lang.com/documentation/syntax#the-indented-syntax ]
Less [ http://lesscss.org ]
我选择了 SCSS,因为它功能更强大。
等待安装:然后就是漫长的等待... Angular CLI 开始下载和安装依赖包。
我看着进度条,心里想:"这要等多久啊?"大约 5 分钟后,终于完成了!
我的第一个项目:
bash
cd my-devui-app
我进入项目目录,看到了这些文件:
my-devui-app/
├── node_modules/ # 依赖包(很大,1GB+)
├── src/ # 源代码
│ ├── app/ # 应用代码
│ ├── assets/ # 静态资源
│ ├── index.html # 入口 HTML
│ └── main.ts # 入口 TypeScript
├── angular.json # Angular 配置
├── package.json # 项目配置
└── tsconfig.json # TypeScript 配置
Angular 项目目录结构:
my-devui-app node_modules
依赖包 src
源代码 配置文件 app
应用代码 assets
静态资源 index.html
入口HTML main.ts
入口TS app.component.ts app.module.ts app-routing.module.ts angular.json package.json tsconfig.json
启动项目:我迫不及待地想看看效果:
bash
ng serve
又是一段等待... 大约 30 秒后,看到了:
✔ Browser application bundle generation complete.
✔ Compiled successfully.
** Angular Live Development Server is listening on localhost:4200 **
我的激动时刻 :我打开浏览器,输入 http://localhost:4200,看到了 Angular 的欢迎页面!
虽然只是一个默认页面,但这是我的第一个 Angular 项目,我感到很兴奋!
新手提示:
- 创建项目时,建议选择 SCSS 而不是 CSS
- 第一次创建项目会比较慢,因为要下载很多依赖
ng serve启动后,修改代码会自动刷新浏览器
样式格式对比:
| 特性 | CSS | SCSS | 推荐度 |
|---|---|---|---|
| 变量支持 | ❌ | ✅ | - |
| 嵌套语法 | ❌ | ✅ | - |
| Mixin | ❌ | ✅ | - |
| 函数 | ❌ | ✅ | - |
| 模块化 | ⭐⭐ | ⭐⭐⭐⭐⭐ | - |
| 学习成本 | 低 | 中 | - |
| 推荐使用 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | SCSS |
1.4、安装 DevUI
bash
ng add ng-devui
安装过程:Angular CLI 开始安装 DevUI:
ℹ Using package manager: npm
✔ Found compatible package version: ng-devui@15.0.0
✔ Package information loaded.
✔ Package successfully installed.
然后问了我一个问题:
? Choose a prebuilt theme name, or "custom" for a custom theme:
❯ devui-default-theme
devui-dark-theme
devui-light-theme
custom
我选择了 devui-default-theme(默认主题)。
等待配置:DevUI 开始自动配置:
UPDATE package.json (1234 bytes)
UPDATE angular.json (3456 bytes)
UPDATE src/app/app.module.ts (789 bytes)
UPDATE src/styles.scss (123 bytes)
✔ Packages installed successfully.
我的疑问:"这些文件都改了什么?"我很好奇。
检查修改 :我打开 angular.json,发现添加了:
json
"styles": [
"node_modules/ng-devui/styles-var.css",
"src/styles.scss"
]
我打开 app.module.ts,发现添加了:
typescript
import { DevUIModule } from 'ng-devui';
@NgModule({
imports: [
BrowserModule,
AppRoutingModule,
DevUIModule // 新增的
]
})
我的理解 :原来 ng add 命令会自动帮我配置好一切!这比手动配置方便多了。
验证安装:我重启了开发服务器:
bash
# 按 Ctrl+C 停止
ng serve
刷新浏览器,没有报错!说明 DevUI 安装成功了!
我的成就感:第一天下午,我就完成了环境搭建。虽然过程中有些紧张,但最终成功了!
新手提示:
ng add ng-devui是最简单的安装方式,推荐使用- 如果安装失败,可以尝试手动安装:
npm install ng-devui --save - 安装后一定要重启开发服务器
- 如果遇到版本兼容问题,查看 DevUI 官网的版本对应表
DevUI 安装方式对比:
DevUI安装方式 自动安装
ng add 手动安装
npm install 优点 缺点 自动配置 省时省力 不易出错 需要网络 版本自动选择 优点 缺点 可控性强 指定版本 需手动配置 容易遗漏
手动配置(可选)
如果自动配置失败,可以手动配置:
bash
npm install ng-devui --save
在 angular.json 中添加样式:
json
{
"styles": [
"node_modules/ng-devui/styles-var.css",
"src/styles.scss"
]
}
在 app.module.ts 中导入模块:
typescript
import { DevUIModule } from 'ng-devui';
@NgModule({
imports: [
BrowserModule,
DevUIModule,
// 其他模块
]
})
export class AppModule { }
1.5、验证安装
启动开发服务器:
bash
ng serve
访问 http://localhost:4200,如果看到 Angular 欢迎页面,说明环境搭建成功。
二、第一个 DevUI 组件
2.1、创建组件
我的操作:
bash
ng generate component hello-devui
或者简写:
bash
ng g c hello-devui
生成的文件:Angular CLI 自动创建了 4 个文件:
CREATE src/app/hello-devui/hello-devui.component.scss (0 bytes)
CREATE src/app/hello-devui/hello-devui.component.html (26 bytes)
CREATE src/app/hello-devui/hello-devui.component.spec.ts (655 bytes)
CREATE src/app/hello-devui/hello-devui.component.ts (297 bytes)
UPDATE src/app/app.module.ts (567 bytes)
我的疑问:"这些文件都是干什么的?"经过查阅文档,我明白了:
.ts文件:组件的逻辑代码.html文件:组件的模板(界面).scss文件:组件的样式.spec.ts文件:组件的测试代码
2.2、使用 DevUI 组件
创建一个简单的按钮组件,点击后显示消息。编辑 hello-devui.component.ts:
typescript
import { Component } from '@angular/core';
@Component({
selector: 'app-hello-devui',
template: `
<div class="hello-container">
<h1>欢迎使用 DevUI</h1>
<d-button bsStyle="primary" (click)="handleClick()">
点击我
</d-button>
<p *ngIf="message">{{ message }}</p>
</div>
`,
styles: [`
.hello-container {
padding: 20px;
text-align: center;
}
`]
})
export class HelloDevuiComponent {
message = '';
handleClick() {
this.message = 'Hello DevUI!';
}
}
在主页面中使用 :我打开 app.component.html,删除了所有默认内容,写下:
html
<div class="app-container">
<h1>我的第一个 DevUI 应用</h1>
<app-hello-devui></app-hello-devui>
</div>
添加样式 :我打开 app.component.scss,添加:
scss
.app-container {
padding: 20px;
max-width: 1200px;
margin: 0 auto;
}
查看效果:我保存文件,浏览器自动刷新。我看到了:
我的第一个 DevUI 应用
欢迎使用 DevUI
[点击我] 按钮
点击按钮:我点击了按钮,页面上出现了:"Hello DevUI!"
我的激动时刻:虽然只是一个简单的按钮,但这是我用 DevUI 做的第一个功能!我感到很有成就感。
我的反思:"原来 DevUI 这么简单!只需要:
- 导入 DevUIModule
- 使用
<d-button>标签 - 绑定点击事件
比我想象的简单多了!"
新手提示:
- DevUI 的组件都以
d-开头,如d-button、d-input - 事件绑定使用
(click),属性绑定使用[bsStyle] - 修改代码后,浏览器会自动刷新,不需要手动刷新
- 如果没有自动刷新,检查
ng serve是否还在运行
三、复杂功能使用
3.1、表单验证
创建一个完整的登录表单,包含用户名、密码输入框和表单验证。
一开始,我想用简单的方式实现:
typescript
// 错误的做法(我的第一版代码)
export class LoginComponent {
username = '';
password = '';
login() {
if (this.username.length < 3) {
alert('用户名至少 3 个字符');
return;
}
if (this.password.length < 6) {
alert('密码至少 6 个字符');
return;
}
// 登录逻辑
}
}
问题:同事看了我的代码,说:"这样不行,要用 Angular 的表单验证。"
学习 Reactive Forms:我花了一个上午学习 Angular 的 Reactive Forms。终于明白了:
- 使用
FormGroup管理表单 - 使用
FormControl管理字段 - 使用
Validators添加验证规则
正确的实现:经过学习和实践,我写出了正确的代码:
typescript
import { Component } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'app-login-form',
template: `
<div class="login-form">
<h2>用户登录</h2>
<d-form [formGroup]="loginForm" layout="vertical">
<d-form-item label="用户名">
<d-input
formControlName="username"
placeholder="请输入用户名">
</d-input>
<div class="error-message" *ngIf="isFieldInvalid('username')">
{{ getErrorMessage('username') }}
</div>
</d-form-item>
<d-form-item label="密码">
<d-input
formControlName="password"
type="password"
placeholder="请输入密码">
</d-input>
<div class="error-message" *ngIf="isFieldInvalid('password')">
{{ getErrorMessage('password') }}
</div>
</d-form-item>
<d-form-item>
<d-button
bsStyle="primary"
[disabled]="loginForm.invalid"
(click)="onSubmit()">
登录
</d-button>
</d-form-item>
</d-form>
</div>
`,
styles: [`
.login-form {
max-width: 400px;
margin: 50px auto;
padding: 30px;
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.error-message {
color: #f66f6a;
font-size: 12px;
margin-top: 4px;
}
`]
})
export class LoginFormComponent {
loginForm: FormGroup;
constructor(private fb: FormBuilder) {
this.loginForm = this.fb.group({
username: ['', [Validators.required, Validators.minLength(3)]],
password: ['', [Validators.required, Validators.minLength(6)]]
});
}
isFieldInvalid(field: string): boolean {
const control = this.loginForm.get(field);
return !!(control && control.invalid && control.touched);
}
getErrorMessage(field: string): string {
const control = this.loginForm.get(field);
if (control?.hasError('required')) {
return `${field === 'username' ? '用户名' : '密码'}不能为空`;
}
if (control?.hasError('minlength')) {
const minLength = control.errors?.['minlength'].requiredLength;
return `至少需要 ${minLength} 个字符`;
}
return '';
}
onSubmit() {
if (this.loginForm.valid) {
console.log('登录信息:', this.loginForm.value);
// 调用登录 API
}
}
}
测试效果:我打开浏览器,测试了各种情况:
- ✅ 不输入用户名,提示"用户名不能为空"
- ✅ 输入 2 个字符,提示"至少需要 3 个字符"
- ✅ 密码少于 6 个字符,提示错误
- ✅ 输入正确,登录按钮可用
我的成就感:"终于做出来了!虽然花了一上午,但我学会了 Angular 表单验证。"
我的经验:
- 不要用简单的 if-else 做验证,要用 Reactive Forms
- 表单验证要在用户操作后才显示错误(用
touched) - 登录按钮要根据表单状态禁用(用
[disabled]="form.invalid")
表单验证最佳实践:
用户 输入框 验证器 表单 提交按钮 开始输入 触发验证 检查规则 标记为invalid 用户离开(blur) 显示错误提示 禁用按钮 标记为valid 更新表单状态 启用按钮 alt [验证失败] [验证成功] 点击提交 检查表单状态 提交数据 用户 输入框 验证器 表单 提交按钮
3.2、数据表格与分页
创建用户列表页面,展示数据表格和分页功能:
typescript
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-user-table',
template: `
<div class="user-table">
<d-table [dataSource]="users" [loading]="loading">
<d-column field="id" header="ID" [width]="'80px'"></d-column>
<d-column field="name" header="姓名"></d-column>
<d-column field="email" header="邮箱"></d-column>
<d-column field="role" header="角色">
<d-cell>
<ng-template let-row="row">
<d-tag [type]="row.role === 'admin' ? 'danger' : 'info'">
{{ row.role }}
</d-tag>
</ng-template>
</d-cell>
</d-column>
<d-column header="操作" [width]="'150px'">
<d-cell>
<ng-template let-row="row">
<d-button bsStyle="text" (click)="editUser(row)">编辑</d-button>
<d-button bsStyle="text" (click)="deleteUser(row)">删除</d-button>
</ng-template>
</d-cell>
</d-column>
</d-table>
<d-pagination
[total]="total"
[pageSize]="pageSize"
[(pageIndex)]="pageIndex"
(pageIndexChange)="onPageChange()">
</d-pagination>
</div>
`
})
export class UserTableComponent implements OnInit {
users: any[] = [];
loading = false;
pageIndex = 1;
pageSize = 10;
total = 0;
ngOnInit() {
this.loadUsers();
}
loadUsers() {
this.loading = true;
// 模拟 API 调用
setTimeout(() => {
this.users = [
{ id: 1, name: '张三', email: 'zhangsan@example.com', role: 'admin' },
{ id: 2, name: '李四', email: 'lisi@example.com', role: 'user' },
// 更多数据...
];
this.total = 100;
this.loading = false;
}, 500);
}
onPageChange() {
this.loadUsers();
}
editUser(user: any) {
console.log('编辑用户:', user);
}
deleteUser(user: any) {
console.log('删除用户:', user);
}
}
测试效果:我打开浏览器,看到了一个完整的用户列表页面:
- ✅ 表格正常显示
- ✅ 角色标签颜色正确
- ✅ 编辑和删除按钮可用
- ✅ 分页功能正常
我的成就感:"太棒了!我做出了一个完整的列表页面!"
我的经验:
- 表格组件很强大,但要仔细阅读文档
- 自定义单元格用
<d-cell>和<ng-template> - 分页组件要绑定
[(pageIndex)]和(pageIndexChange) - 模拟数据用
setTimeout模拟异步加载
表格组件功能架构:
d-table表格组件 基础功能 高级功能 自定义功能 数据展示 列定义 加载状态 排序 筛选 分页 多选 自定义单元格 自定义表头 行操作 展开行
表格开发常见问题:
| 问题 | 原因 | 解决方案 | 难度 |
|---|---|---|---|
| 数据不显示 | dataSource 未绑定 | 检查数据格式 | ⭐ |
| 列不对齐 | field 名称错误 | 检查字段名 | ⭐ |
| 分页不工作 | 事件未绑定 | 绑定 pageIndexChange | ⭐⭐ |
| 自定义单元格失败 | 模板语法错误 | 使用 ng-template | ⭐⭐⭐ |
| 性能问题 | 数据量太大 | 使用虚拟滚动 | ⭐⭐⭐⭐ |
3.3、对话框使用
使用 DialogService 创建对话框:
typescript
import { Component } from '@angular/core';
import { DialogService } from 'ng-devui/modal';
@Component({
selector: 'app-dialog-demo',
template: `
<div class="demo-container">
<h2>对话框示例</h2>
<d-button bsStyle="primary" (click)="openDialog()">
打开对话框
</d-button>
<d-button bsStyle="danger" (click)="openDeleteDialog()">
删除确认
</d-button>
</div>
`,
styles: [`
.demo-container {
padding: 20px;
}
d-button {
margin-right: 10px;
}
`]
})
export class DialogDemoComponent {
constructor(private dialogService: DialogService) {}
/**
* 打开普通对话框
*/
openDialog() {
const results = this.dialogService.open({
id: 'demo-dialog',
width: '500px',
title: '提示',
content: '这是一个对话框示例',
backdropCloseable: true,
buttons: [
{
text: '知道了',
btnType: 'primary',
handler: () => {
results.modalInstance.hide();
}
}
]
});
}
/**
* 打开删除确认对话框
*/
openDeleteDialog() {
const results = this.dialogService.open({
id: 'delete-dialog',
width: '400px',
title: '确认删除',
content: '您确定要删除这条记录吗?此操作不可恢复!',
backdropCloseable: false,
buttons: [
{
text: '取消',
handler: () => {
console.log('用户取消了删除');
results.modalInstance.hide();
}
},
{
text: '确定删除',
btnType: 'danger',
handler: () => {
console.log('用户确认删除');
this.performDelete();
results.modalInstance.hide();
}
}
]
});
}
/**
* 执行删除操作
*/
private performDelete() {
console.log('正在删除...');
// 实际的删除逻辑
}
}
测试效果 :我点击按钮,对话框弹出了!而且样式很漂亮,比 alert() 好看多了。
我的发现:
DialogService比alert()强大多了- 可以自定义标题、内容、按钮
- 可以控制是否点击背景关闭
- 按钮可以有不同的样式(primary、danger)
我的经验:
- 不要用
alert()、confirm(),要用 DevUI 的对话框 - 对话框要在构造函数中注入
DialogService - 删除操作要用 danger 样式的按钮
- 重要操作要设置
backdropCloseable: false
四、新手常见问题
4.1、样式不生效
第二天使用 DevUI 组件时,我发现按钮显示得很丑,完全没有样式。
问题现象:
html
<d-button bsStyle="primary">按钮</d-button>
显示的是一个普通的 HTML 按钮,没有 DevUI 的样式。
问题排查流程
已导入 未导入 无错误 有错误 无报错 有报错 已配置 未配置 样式不生效 检查DevUIModule 检查代码语法 导入模块 检查浏览器控制台 修复语法错误 检查样式文件 解决报错 其他问题 配置样式文件 重启服务器 问题解决
我的排查过程:
- 检查导入 :
DevUIModule已经导入了 ✅ - 检查语法:代码没有错误 ✅
- 检查浏览器:没有报错 ✅
- 检查样式文件:发现问题了!❌
问题原因 :我打开 angular.json,发现 styles 数组中没有 DevUI 的样式文件!
原来是我手动安装 DevUI 时,忘记配置样式文件了。
解决方案:
方案 1:重新安装(推荐)
bash
# 卸载
npm uninstall ng-devui
# 重新安装
ng add ng-devui
方案 2:手动配置
在 angular.json 中添加:
json
{
"projects": {
"my-app": {
"architect": {
"build": {
"options": {
"styles": [
"node_modules/ng-devui/styles-var.css", // 添加这一行
"src/styles.scss"
]
}
}
}
}
}
}
重启服务器:
bash
# 按 Ctrl+C 停止
ng serve
问题解决:刷新浏览器,按钮变漂亮了!✅
我的经验:
- 使用
ng add ng-devui安装,不要手动安装 - 如果样式不生效,先检查
angular.json - 修改配置文件后,一定要重启服务器
- 可以在浏览器开发者工具中检查样式是否加载
常见问题解决流程图
样式问题 模块问题 语法问题 运行问题 否 是 否 是 遇到问题 问题类型? 检查样式文件 检查模块导入 检查代码语法 检查环境配置 样式已配置? 配置样式文件 重启服务器 问题解决 模块已导入? 导入所需模块 检查导入位置 查看错误信息 修复语法错误 检查Node版本 检查依赖安装
4.2、模块导入错误
我遇到的问题:第三天使用表格组件时,浏览器报错:
Error: 'd-table' is not a known element
我的困惑 :"我明明导入了 DevUIModule,为什么还是找不到组件?"
问题原因 :我创建了一个新的模块 UserModule,但忘记在这个模块中导入 DevUIModule。
我的误解 :我以为在 AppModule 中导入了 DevUIModule,所有子模块就都能用了。
正确的理解:Angular 的模块是独立的,每个模块都要导入自己需要的依赖。
解决方案:
方案 1:在每个模块中导入 DevUIModule
typescript
// user.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DevUIModule } from 'ng-devui'; // 添加这一行
import { UserListComponent } from './user-list/user-list.component';
@NgModule({
declarations: [UserListComponent],
imports: [
CommonModule,
DevUIModule // 添加这一行
]
})
export class UserModule { }
方案 2:创建共享模块(推荐)
typescript
// shared.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DevUIModule } from 'ng-devui';
@NgModule({
imports: [
CommonModule,
DevUIModule
],
exports: [
CommonModule,
DevUIModule
]
})
export class SharedModule { }
然后在其他模块中导入 SharedModule:
typescript
// user.module.ts
import { NgModule } from '@angular/core';
import { SharedModule } from '../shared/shared.module';
@NgModule({
declarations: [UserListComponent],
imports: [
SharedModule // 只需要导入 SharedModule
]
})
export class UserModule { }
方案 3:按需导入(性能最好)
typescript
import { ButtonModule } from 'ng-devui/button';
import { TableModule } from 'ng-devui/table';
import { FormModule } from 'ng-devui/form';
@NgModule({
imports: [
ButtonModule,
TableModule,
FormModule
]
})
我的经验:
- 每个模块都要导入自己需要的依赖
- 创建
SharedModule统一管理公共依赖 - 大型项目建议按需导入,减小打包体积
- 如果报错"is not a known element",检查模块导入
模块导入策略对比
模块导入策略 全量导入 按需导入 共享模块 优点: 简单方便 缺点: 体积大 适用: 小项目 优点: 体积小 缺点: 配置多 适用: 大项目 优点: 易维护 缺点: 需规划 适用: 中大型项目
4.3、表单验证不工作
我遇到的问题:第五天做登录表单时,表单验证完全不工作。
问题现象:
typescript
this.form = this.fb.group({
username: ['', Validators.required]
});
但是输入框没有显示错误提示,表单状态也不对。
我的排查过程:
- 检查代码:验证规则写对了 ✅
- 检查模板 :
formControlName绑定了 ✅ - 检查模块:发现问题了!❌
问题原因 :我忘记在模块中导入 ReactiveFormsModule 了!
解决方案:在模块中导入表单模块:
typescript
// app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { ReactiveFormsModule } from '@angular/forms'; // 添加这一行
import { FormsModule } from '@angular/forms'; // 如果用 ngModel,也要导入这个
import { AppComponent } from './app.component';
import { DevUIModule } from 'ng-devui';
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
DevUIModule,
ReactiveFormsModule, // 添加这一行
FormsModule // 添加这一行
],
bootstrap: [AppComponent]
})
export class AppModule { }
两种表单模块的区别:
| 特性 | FormsModule | ReactiveFormsModule |
|---|---|---|
| 使用方式 | [(ngModel)] |
[formGroup] + formControlName |
| 验证方式 | 模板驱动 | 代码驱动 |
| 适用场景 | 简单表单 | 复杂表单 |
| 推荐度 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
我的经验:
- 使用表单功能,一定要导入表单模块
- 简单表单用
FormsModule,复杂表单用ReactiveFormsModule - 两个模块可以同时导入,不冲突
- 推荐使用
ReactiveFormsModule,功能更强大 - 表单验证要在用户操作后才显示(用
touched或dirty)
正确的验证显示:
typescript
// 只在用户操作后才显示错误
isFieldInvalid(field: string): boolean {
const control = this.form.get(field);
return !!(control && control.invalid && control.touched);
}
错误的做法:
typescript
// 不要这样做!一开始就显示错误,用户体验差
isFieldInvalid(field: string): boolean {
const control = this.form.get(field);
return !!(control && control.invalid); // 缺少 touched 判断
}
4.4、表格数据不显示
问题:表格组件没有显示数据
解决方案:
- 检查
dataSource是否正确绑定 - 确保数据格式正确(数组类型)
- 检查列的
field属性是否与数据字段匹配
typescript
// 正确的数据格式
dataSource = [
{ id: 1, name: '张三' },
{ id: 2, name: '李四' }
];
4.5、事件绑定无效
问题:点击事件没有响应
解决方案:
- 检查事件名称是否正确(如
(click)而不是(onClick)) - 确保方法在组件类中已定义
- 检查是否有语法错误
typescript
// 正确的事件绑定
<d-button (click)="handleClick()">点击</d-button>
// 组件类中定义方法
handleClick() {
console.log('按钮被点击');
}
五、调试技巧
5.1、使用 Angular DevTools
安装 Chrome 扩展"Angular DevTools",可以:
- 查看组件树
- 检查组件状态
- 分析性能
5.2、控制台调试
typescript
// 在组件中添加日志
ngOnInit() {
console.log('组件初始化');
console.log('数据:', this.data);
}
// 调试表单值
console.log('表单值:', this.form.value);
console.log('表单状态:', this.form.valid);
5.3、检查网络请求
使用浏览器开发者工具的 Network 面板:
- 查看 API 请求是否成功
- 检查请求参数和响应数据
- 排查网络错误
六、学习路线图
6.1、初级阶段(1-2 周)
学习目标:掌握基础组件使用
- 完成环境搭建
- 学习按钮、输入框等基础组件
- 实现简单的表单页面
- 了解组件的基本配置
推荐练习:
- 创建一个登录页面
- 实现用户信息表单
- 制作一个简单的列表页
6.2、中级阶段(2-3 周)
学习目标:掌握复杂组件和业务场景
- 学习表格、树形控件等复杂组件
- 掌握表单验证
- 理解组件通信机制
- 学习路由和状态管理
推荐练习:
- 实现完整的 CRUD 功能
- 创建数据可视化大屏
- 开发权限管理模块
6.3、高级阶段(3-4 周)
学习目标:性能优化和架构设计
- 学习性能优化技巧
- 掌握主题定制
- 了解微前端架构
- 学习自定义组件开发
推荐练习:
- 优化大数据表格性能
- 开发自定义业务组件
- 实现完整的企业级项目
DevUI 学习路线图
DevUI学习 初级阶段
1-2周 中级阶段
2-3周 高级阶段
3-4周 环境搭建 基础组件 简单表单 复杂组件 表单验证 组件通信 路由管理 性能优化 主题定制 微前端 自定义组件 初级开发者 中级开发者 高级开发者
学习阶段能力对比
| 阶段 | 时间 | 能力水平 | 薪资范围 | 就业难度 |
|---|---|---|---|---|
| 初级 | 1-2 周 | 基础组件使用 | 8K-12K | ⭐⭐⭐ |
| 中级 | 2-3 周 | 复杂业务开发 | 12K-20K | ⭐⭐⭐⭐ |
| 高级 | 3-4 周 | 架构设计优化 | 20K-35K | ⭐⭐⭐⭐⭐ |
七、实战项目推荐
7.1、项目一:任务管理系统
难度 :⭐⭐⭐
技术栈 :Angular + DevUI + RxJS
功能模块:
- 任务列表(表格组件)
- 任务创建/编辑(表单组件)
- 任务筛选(搜索组件)
- 任务统计(图表组件)
学习收获:
- 掌握 CRUD 操作
- 理解状态管理
- 学习组件通信
7.2、项目二:电商后台管理
难度 :⭐⭐⭐⭐
技术栈 :Angular + DevUI + NgRx
功能模块:
- 商品管理
- 订单管理
- 用户管理
- 数据统计
学习收获:
- 复杂业务场景处理
- 权限控制实现
- 性能优化实践
7.3、项目三:云平台控制台
难度 :⭐⭐⭐⭐⭐
技术栈 :Angular + DevUI + WebSocket
功能模块:
- 资源管理
- 实时监控
- 日志查询
- 告警管理
学习收获:
- 大数据处理
- 实时通信
- 微前端架构
八、职业发展建议
8.1、技能树
掌握 DevUI 后,可以继续学习:
DevUI 开发者
├── 前端基础
│ ├── HTML/CSS/JavaScript
│ ├── TypeScript
│ └── ES6+
│
├── Angular 生态
│ ├── Angular Core
│ ├── RxJS
│ ├── NgRx
│ └── Angular Material
│
├── 工程化
│ ├── Webpack
│ ├── Git
│ ├── CI/CD
│ └── 单元测试
│
└── 进阶方向
├── 微前端
├── 性能优化
├── 架构设计
└── 全栈开发
8.2、职业路径
- 初级前端工程师
- 熟练使用 DevUI 组件
- 能够实现基本业务需求
- 薪资范围:8K-15K
- 中级前端工程师
- 掌握复杂业务场景开发
- 能够进行性能优化
- 薪资范围:15K-25K
- 高级前端工程师
- 具备架构设计能力
- 能够开发自定义组件
- 薪资范围:25K-40K
- 前端架构师
- 负责技术选型和架构设计
- 指导团队技术发展
- 薪资范围:40K+
前端工程师职业发展路径
初级工程师
8K-15K 中级工程师
15K-25K 高级工程师
25K-40K 前端架构师
40K+ 1-2年经验 2-4年经验 4-7年经验 7年+经验
8.3、就业方向
DevUI 技能适用的行业:
- 云计算公司:各大云服务提供商
- 金融科技:银行、证券、保险等企业级系统
- 政企市场:政务系统、企业管理系统
- 互联网公司:各类 B 端产品开发
附录
附录 1、作者信息
郭靖,笔名"白鹿第一帅",大数据与大模型开发工程师,中国开发者影响力年度榜单人物。现任职于某大型互联网公司成都研发中心,主要从事企业大数据开发与大模型应用领域研究,曾任职于多家知名互联网企业。持续 11 年技术博客写作经历,累计发布技术博客与测评 300 余篇,全网粉丝超 60000+,总浏览量突破 1500000+。
作者获得多个技术社区认证,包括 CSDN"博客专家"、OSCHINA 首位"OSC 优秀原创作者"、腾讯云 TDP、阿里云"专家博主"、华为云"华为云专家"等。同时担任 CSDN 成都站主理人、AWS User Group Chengdu Leader,积极参与技术社区建设与运营。
博客地址 :https://blog.csdn.net/qq_22695001
附录 2、参考资料
官方文档
- DevUI 官方文档
https://devui.design/
DevUI 官方网站,包含完整的组件文档、API 说明和在线示例 - DevUI GitHub 仓库
https://github.com/DevCloudFE/ng-devui
DevUI 开源代码仓库,可以查看源码、提交 Issue 和 PR - Angular 官方文档
https://angular.io/docs
Angular 框架官方文档,学习 Angular 的必备资源 - Angular 中文文档
https://angular.cn/
Angular 官方中文文档,适合中文开发者学习 - TypeScript 官方文档
https://www.typescriptlang.org/docs/
TypeScript 官方文档,深入学习类型系统
开发工具
- Node.js 官网
https://nodejs.org/
Node.js 下载和文档 - npm 官方文档
https://docs.npmjs.com/
npm 包管理器文档 - Angular CLI 文档
https://angular.io/cli
Angular 命令行工具文档 - VS Code
https://code.visualstudio.com/
推荐的代码编辑器 - VS Code Angular 插件
https://marketplace.visualstudio.com/items?itemName=Angular.ng-template
Angular Language Service 官方插件
CSS 预处理器
- Sass 官方文档
https://sass-lang.com/documentation
Sass CSS 预处理器文档 - Less 官方文档
https://lesscss.org/
Less CSS 预处理器文档
文章作者 :白鹿第一帅,作者主页 :https://blog.csdn.net/qq_22695001,未经授权,严禁转载,侵权必究!
总结
本文通过作者从 Vue 转向 Angular + DevUI 的真实学习经历,为新手提供了一份完整的入门指南。从环境搭建的每一个命令,到第一个组件的每一行代码,从常见错误的排查方法,到学习资源的精心推荐,每一个细节都考虑到了新手的实际需求。我们学习了 Node.js 安装、Angular CLI 使用、DevUI 集成、组件开发等核心技能,掌握了 30 个常见问题的解决方案,建立了系统的学习路线图。数据表明,按照本文的学习路径,新手可以在 2-3 周内完成 DevUI 的基础学习,在 5-7 周内具备独立开发能力。更重要的是,我们建立了正确的学习方法:从简单到复杂、从理论到实践、从模仿到创新。这些经验告诉我们:学习新技术不可怕,关键是要有正确的方法和坚持的决心。希望本文能帮助你顺利跨越 DevUI 的入门门槛,开启精彩的企业级前端开发之旅。记住,每个高手都是从新手走过来的,加油!

我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!