今天小編給大家分享一下Angular+NG-ZORRO怎么開發(fā)一個(gè)后臺(tái)系統(tǒng)的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、工布江達(dá)網(wǎng)絡(luò)推廣、重慶小程序開發(fā)、工布江達(dá)網(wǎng)絡(luò)營銷、工布江達(dá)企業(yè)策劃、工布江達(dá)品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供工布江達(dá)建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
系統(tǒng)功能包括下面的內(nèi)容:
歡迎頁面
用戶列表
用戶新增
用戶修改
用戶刪除
所有的 service 使用模擬的數(shù)據(jù)。
說干咱就干。
結(jié)合 ng-zorro
angular
比較流行的 ui
框架有:
Angular Material 官方指定 UI 框架
NG-ZORRO,又名 Ant Design of Angular 國內(nèi)比較流行的 UI 框架
Ant Design
相信做前端開發(fā)的人兒都比較熟悉了。所以這里我們結(jié)合 NG-ZORRO
這個(gè)框架來做。如果熟悉 Vue
或者 React
版本的 Ant Design
,相信你可以無縫鏈接啊~
我們重新使用 angular-cli
生成一個(gè)項(xiàng)目 ng-zorro
。
添加 ng-zorro
是很簡單的事情:進(jìn)入 ng-zorro
根目錄,執(zhí)行 ng add ng-zorro-antd
即可。
當(dāng)然你也可以執(zhí)行
npm install ng-zorro-antd
添加,不推薦。
結(jié)合 ng-zorro
完成之后,我們運(yùn)行項(xiàng)目起來 npm run start
,你會(huì)在 http://localhost:4200
的頁面看到下圖內(nèi)容。
Not Bad, Bro.
配置路由
我們改成 hash
路由,并添加用戶路由,腳手架都幫我們完事了,我們只要做點(diǎn)小修改。
思路:
先添加頁面 user
用戶的列表頁面,使用 ng-zorro
中 table
組件
用戶的新增和更改頁面可以共用同一個(gè)頁面,使用 ng-zorro
中 form
組件
頁面刪除功能直接使用彈窗提示,使用 ng-zorro
中 modal
組件
對 ng-zorro
組件按需引入
調(diào)整路由文件
按照思路,我們得在 ng-zorro
引入:
// app.module.ts import { ReactiveFormsModule } from '@angular/forms'; import { NzTableModule } from 'ng-zorro-antd/table'; import { NzModalModule } from 'ng-zorro-antd/modal'; import { NzButtonModule } from 'ng-zorro-antd/button'; import { NzFormModule } from 'ng-zorro-antd/form'; import { NzInputModule } from 'ng-zorro-antd/input'; // ... imports: [ // 是在 imports 中添加,而不是 declarations 中聲明 NzTableModule, NzModalModule, NzButtonModule, NzFormModule, ReactiveFormsModule, NzInputModule ],
簡單易理解原則,我們這里不使用 children
進(jìn)行路由的嵌套:
// app.routing.module.ts import { NgModule } from '@angular/core'; import { Routes, RouterModule, PreloadAllModules } from '@angular/router'; import { WelcomeComponent } from './pages/welcome/welcome.component'; import { UserComponent } from './pages/user/user.component'; import { UserInfoComponent } from './pages/user/user-info/user-info.component'; // 相關(guān)的路由 const routes: Routes = [ { path: '', pathMatch: 'full', redirectTo: '/welcome' }, { path: 'welcome', component: WelcomeComponent }, { path: 'user', component: UserComponent }, { path: 'user/add', component: UserInfoComponent }, { path: 'user/edit/:uuid', component: UserInfoComponent } ]; @NgModule({ imports: [RouterModule.forRoot( routes, { useHash: true,// 使用 hash 模式 preloadingStrategy: PreloadAllModules } )], exports: [RouterModule] }) export class AppRoutingModule { }
更改菜單
使用腳手架生成的菜單與我們需要開發(fā)的功能不符合,我們來調(diào)整下。
// app.component.html
菜單展示,如果我們需要做權(quán)限管理的話,是需要后端配合進(jìn)行傳值的,然后我們再把相關(guān)的權(quán)限菜單渲染到頁面
替換成上面的代碼后,得到的基本骨架如下:
完成用戶列表
接下來完成用戶列表的骨架,因?yàn)槭褂昧?UI
框架,我么寫起來異常的方便:
獲取用戶列表
// user.component.htmlName Position Action {{data.name}} {{data.position}} Delete
我們模擬了些數(shù)據(jù)在 assets
文件夾中 user.json
:
{ "users": [ { "uuid": 1, "name": "Jimmy", "position": "Frontend" }, { "uuid": 2, "name": "Jim", "position": "Backend" } ], "environment": "development" }
編寫好服務(wù)之后,我們調(diào)用獲取用戶的數(shù)據(jù):
// user.component.ts import { Component, OnInit } from '@angular/core'; import { UserService } from 'src/app/services/user.service'; @Component({ selector: 'app-user', templateUrl: './user.component.html', styleUrls: ['./user.component.scss'] }) export class UserComponent implements OnInit { public list: any = [] constructor( private readonly userService: UserService ) { } ngOnInit(): void { if(localStorage.getItem('users')) { let obj = localStorage.getItem('users') || '{}' this.list = JSON.parse(obj) } else { this.getList() } } // 獲取用戶列表 getList() { this.userService.getUserList().subscribe({ next: (data: any) => { localStorage.setItem('users', JSON.stringify(data.users)) this.list = data.users }, error: (error: any) => { console.log(error) } }) } }
因?yàn)闆]有引入后端服務(wù),這里我們采用 localstorage
的方式記錄狀態(tài)。
上面完成后,我們得到列表信息如下:
新增用戶和編輯用戶
我們簡單建立個(gè)表單,里面含有的字段就兩個(gè),分別是 name
和 position
。這兩個(gè)功能是公用一個(gè)表單的~
我們在 html
中添加:
// user-info.component.html
頁面長這樣子:
然后就是邏輯的判斷,進(jìn)行添加或者是修改。如果是連接帶上 uuid
的標(biāo)識(shí),就表示是編輯,show you the codes
。
// user-info.component.ts import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { ActivatedRoute, ParamMap } from '@angular/router'; @Component({ selector: 'app-user-info', templateUrl: './user-info.component.html', styleUrls: ['./user-info.component.scss'] }) export class UserInfoComponent implements OnInit { public isAdd: boolean = true; public userInfo: any = [] public uuid: number = 0; validateForm!: FormGroup; constructor( private fb: FormBuilder, private route: ActivatedRoute, ) { } ngOnInit(): void { this.userInfo = JSON.parse(localStorage.getItem('users') || '[]') this.route.paramMap.subscribe((params: ParamMap)=>{ this.uuid = parseInt(params.get('uuid') || '0') }) // 是編輯狀態(tài),設(shè)置標(biāo)志符 if(this.uuid) { this.isAdd = false } if(this.isAdd) { this.validateForm = this.fb.group({ username: [null, [Validators.required]], position: [null, [Validators.required]] }); } else { let current = (this.userInfo.filter((item: any) => item.uuid === this.uuid))[0] || {} // 信息回填 this.validateForm = this.fb.group({ username: [current.name, [Validators.required]], position: [current.position, [Validators.required]] }) } } submitForm() { // 如果不符合提交,則報(bào)錯(cuò) if(!this.validateForm.valid) { Object.values(this.validateForm.controls).forEach((control: any) => { if(control?.invalid) { control?.markAsDirty(); control?.updateValueAndValidity({ onlySelf: true }); } }) return } // 獲取到表單的數(shù)據(jù) const data = this.validateForm.value // 新增用戶 if(this.isAdd) { let lastOne = (this.userInfo.length > 0 ? this.userInfo[this.userInfo.length-1] : {}); this.userInfo.push({ uuid: (lastOne.uuid ? (lastOne.uuid + 1) : 1), name: data.username, position: data.position }) localStorage.setItem('users', JSON.stringify(this.userInfo)) } else { // 編輯用戶,更新信息 let mapList = this.userInfo.map((item: any) => { if(item.uuid === this.uuid) { return { uuid: this.uuid, name: data.username, position: data.position } } return item }) localStorage.setItem('users', JSON.stringify(mapList)) } } }
我們先設(shè)定一個(gè)標(biāo)志符 isAdd
,默認(rèn)是新建用戶;當(dāng) uuid
存在的時(shí)候,將其設(shè)置為 false
值,表示是編輯的狀態(tài),對內(nèi)容進(jìn)行表單的回填。提交表單的操作也是按照該標(biāo)志符進(jìn)行判斷。我們直接對 localStorage
的信息進(jìn)行變更,以保證同步列表信息。
刪除功能
我們引入模態(tài)對話框進(jìn)行詢問是否刪除。
// user.component.ts // 刪除 delete(data: any) { this.modal.confirm({ nzTitle: '你想刪除該用戶?', nzOnOk: () => { let users = JSON.parse(localStorage.getItem('users') || '[]'); let filterList = users.filter((item: any) => item.uuid !== data.uuid); localStorage.setItem('users', JSON.stringify(filterList)); this.list = filterList } }); }
我們找到刪除的數(shù)據(jù),將其剔除,重新緩存新的用戶數(shù)據(jù),并更新 table
的用戶列表數(shù)據(jù)。
以上就是“Angular+NG-ZORRO怎么開發(fā)一個(gè)后臺(tái)系統(tǒng)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。