目次
Ng-Zorro
ホームページ ウェブフロントエンド jsチュートリアル Angular + NG-ZORRO でバックエンド システムを迅速に開発

Angular + NG-ZORRO でバックエンド システムを迅速に開発

Apr 21, 2022 am 10:45 AM
angular

この記事では、angualr と ng-zorro を組み合わせてバックエンド システムを迅速に開発する方法を学ぶ Angular の実践的な経験を共有します。

Angular + NG-ZORRO でバックエンド システムを迅速に開発

私たちはここ数日間で angular について多くのことを学びました。今回は小さな完成品です。

angualr ng-zorro と組み合わせて、バックエンド システムを迅速かつ標準化して開発します。 [関連チュートリアルの推奨事項: "angular チュートリアル"]

システム関数には次のものが含まれます:

  • ウェルカム ページ
  • ユーザー リスト
  • ユーザー追加
  • ユーザー変更
  • ユーザー削除

すべてのサービスはシミュレートされたデータを使用します。

言われた通りにやってみましょう。

ng-zorro との組み合わせ

##angular より人気のある ui フレームワークは次のとおりです:

    Angular Material 正式に指定された UI フレームワーク
  • NG-ZORRO (別名 Ant Design of Angular) は国内で最も人気のある UI フレームワーク

Antデザイン フロントエンド開発をしている人はよく知っていると思います。そこで、ここではそれを NG-ZORRO フレームワークと組み合わせます。 Ant DesignVue または React バージョンに精通している場合は、シームレスに接続できると思います~

Angular + NG-ZORRO でバックエンド システムを迅速に開発

angular-cli を再利用して、プロジェクト ng-zorro を生成します。

ng-zorro の追加は非常に簡単です。ng-zorro ルート ディレクトリに入り、ng add ng-zorro-antd を実行します。できる。

もちろん、

npm install ng-zorro-antd を実行して追加することもできますが、お勧めしません。

Combined

ng-zorro 完了後、プロジェクトを実行しますnpm run starthttp://localhost:4200 に移動します。 ページでは、以下の内容を参照してください。

Angular + NG-ZORRO でバックエンド システムを迅速に開発

#悪くないですよ、仲間。

#ルーティングを設定します

hash

ルーティングに変更し、ユーザー ルーティングを追加しました。スキャフォールディングがそれを行ってくれたので、いくつかの小さな変更を加えるだけで済みます。

アイデア:

最初にページ
    user
  • ユーザーのリスト ページを追加し、

    table で ng-zorro を使用します コンポーネント

    ユーザーの新規ページと変更されたページは、
  • ng-zorro
  • form コンポーネント## を使用して、同じページを共有できます。 #ページ削除機能は、

    ng-zorro
  • # の modal コンポーネントを使用して、ポップアップ プロンプトを直接使用します。 # 必要に応じて ng-zorro

    コンポーネントを導入します
  • ルーティング ファイルを調整します

  • アイデアに従って

    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 を使用しません:

// 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';

// 相关的路由
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 { }
ログイン後にコピー

メニューを変更する

スキャフォールディングを使用して生成されたメニューは、開発する必要がある機能と一致しません。調整しましょう。

// app.component.html

<nz-layout class="app-layout">
  <nz-sider class="menu-sidebar"
            nzCollapsible
            nzWidth="256px"
            nzBreakpoint="md"
            [(nzCollapsed)]="isCollapsed"
            [nzTrigger]="null">
    <div class="sidebar-logo">
      <!-- 默认点击 logo 跳转到首页 -->
      <a routerLink="/welcome">
        <img src="/static/imghw/default1.png"  data-src="https://ng.ant.design/assets/img/logo.svg"  class="lazy"   alt="logo">
        <h1 id="Ng-Zorro">Ng-Zorro</h1>
      </a>
    </div>
    <ul nz-menu nzTheme="dark" nzMode="inline" [nzInlineCollapsed]="isCollapsed">
      <li nz-submenu nzOpen nzTitle="用户管理" nzIcon="dashboard">
        <ul>
          <li nz-menu-item nzMatchRouter>
            <a routerLink="/user">用户列表</a>
          </li>
        </ul>
      </li>
    </ul>
  </nz-sider>
  <nz-layout>
    <nz-header>
      <div class="app-header">
        <span class="header-trigger" (click)="isCollapsed = !isCollapsed">
            <i class="trigger"
               nz-icon
               [nzType]="isCollapsed ? &#39;menu-unfold&#39; : &#39;menu-fold&#39;"
            ></i>
        </span>
      </div>
    </nz-header>
    <nz-content>
      <div class="inner-content">
        <router-outlet></router-outlet>
      </div>
    </nz-content>
  </nz-layout>
</nz-layout>
ログイン後にコピー
メニュー表示。権限管理を行う必要がある場合は、バックエンドが値の転送と連携する必要があります。その後、関連する権限メニューをページに表示します

上記のコードを置き換えた後、取得される基本的なスケルトンは次のとおりです:

完全なユーザー リストAngular + NG-ZORRO でバックエンド システムを迅速に開発

次に、ユーザー リストのスケルトンを完成させます。UI フレームワークを使用しているため、次のように記述すると非常に便利です:

ユーザー リストを取得

// user.component.html

<nz-table #basicTable [nzData]="list">
  <thead>
    <tr>
      <th>Name</th>
      <th>Position</th>
      <th>Action</th>
    </tr>
  </thead>
  <tbody>
    <!-- 对获取到的数据进行遍历 -->
    <tr *ngFor="let data of basicTable.data">
      <td>{{data.name}}</td>
      <td>{{data.position}}</td>
      <td>
        <a style="color: #f00;">Delete</a>
      </td>
    </tr>
  </tbody>
</nz-table>
ログイン後にコピー

assets フォルダー user.json

:

{
  "users": [
    {
      "uuid": 1,
      "name": "Jimmy",
      "position": "Frontend"
    },
    {
      "uuid": 2,
      "name": "Jim",
      "position": "Backend"
    }
  ],
  "environment": "development"
}
ログイン後にコピー
内のいくつかのデータをシミュレートしました。サービスを作成した後、ユーザーのdata:
// user.component.ts

import { Component, OnInit } from &#39;@angular/core&#39;;
import { UserService } from &#39;src/app/services/user.service&#39;;

@Component({
  selector: &#39;app-user&#39;,
  templateUrl: &#39;./user.component.html&#39;,
  styleUrls: [&#39;./user.component.scss&#39;]
})
export class UserComponent implements OnInit {

  public list: any = []

  constructor(
    private readonly userService: UserService
  ) { }

  ngOnInit(): void {
    if(localStorage.getItem(&#39;users&#39;)) {
      let obj = localStorage.getItem(&#39;users&#39;) || &#39;{}&#39;
      this.list =  JSON.parse(obj)
    } else {
      this.getList()
    }
  }

  // 获取用户列表
  getList() {
    this.userService.getUserList().subscribe({
      next: (data: any) => {
        localStorage.setItem(&#39;users&#39;, JSON.stringify(data.users))
        this.list = data.users
      },
      error: (error: any) => {
        console.log(error)
      }
    })
  }

}
ログイン後にコピー
バックエンド サービスが導入されていないため、ここでは localstorage

を使用してステータスを記録します。

上記を完了すると、次のようなリスト情報が取得されます:

新規ユーザーと編集ユーザー

Angular + NG-ZORRO でバックエンド システムを迅速に開発

us

nameposition

という 2 つのフィールドのみを含むフォームを作成するだけです。これら 2 つの関数は共通の形式を共有します~

追加しますhtml:

// user-info.component.html

<form nz-form [formGroup]="validateForm" class="login-form" (ngSubmit)="submitForm()">
  <nz-form-item>
    <nz-form-control nzErrorTip="请输入用户名!">
      <input type="text" nz-input formControlName="username" placeholder="请输入用户名" style="width: 160px;" />
    </nz-form-control>
  </nz-form-item>
  <nz-form-item>
    <nz-form-control nzErrorTip="请输入职位!">
      <input type="text" nz-input formControlName="position" placeholder="请输入职位" style="width: 160px;"/>
    </nz-form-control>
  </nz-form-item>
  <button nz-button class="login-form-button login-form-margin" [nzType]="&#39;primary&#39;">确认</button>
</form>
ログイン後にコピー

ページは次のようになります:

#

然后就是逻辑的判断,进行添加或者是修改。如果是连接带上 uuid 的标识,就表示是编辑,show you the codes

// user-info.component.ts

import { Component, OnInit } from &#39;@angular/core&#39;;
import { FormBuilder, FormGroup, Validators } from &#39;@angular/forms&#39;;
import { ActivatedRoute, ParamMap } from &#39;@angular/router&#39;;

@Component({
  selector: &#39;app-user-info&#39;,
  templateUrl: &#39;./user-info.component.html&#39;,
  styleUrls: [&#39;./user-info.component.scss&#39;]
})
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(&#39;users&#39;) || &#39;[]&#39;)
    this.route.paramMap.subscribe((params: ParamMap)=>{
      this.uuid = parseInt(params.get(&#39;uuid&#39;) || &#39;0&#39;)
    })
    // 是编辑状态,设置标志符
    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() {
    // 如果不符合提交,则报错
    if(!this.validateForm.valid) {
      Object.values(this.validateForm.controls).forEach((control: any) => {
        if(control?.invalid) {
          control?.markAsDirty();
          control?.updateValueAndValidity({ onlySelf: true });
        }
      })
      return
    }

    // 获取到表单的数据
    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(&#39;users&#39;, 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(&#39;users&#39;, JSON.stringify(mapList))
    }
  }

}
ログイン後にコピー

我们先设定一个标志符 isAdd,默认是新建用户;当 uuid 存在的时候,将其设置为 false 值,表示是编辑的状态,对内容进行表单的回填。提交表单的操作也是按照该标志符进行判断。我们直接对 localStorage 的信息进行变更,以保证同步列表信息。

删除功能

我们引入模态对话框进行询问是否删除。

// user.component.ts

// 删除
delete(data: any) {
  this.modal.confirm({
    nzTitle: &#39;<i>你想删除该用户?</i>&#39;,
    nzOnOk: () => {
      let users = JSON.parse(localStorage.getItem(&#39;users&#39;) || &#39;[]&#39;);
      let filterList = users.filter((item: any) => item.uuid !== data.uuid);
      localStorage.setItem(&#39;users&#39;, JSON.stringify(filterList));
      this.list = filterList
    }
  });
}
ログイン後にコピー

Angular + NG-ZORRO でバックエンド システムを迅速に開発

我们找到删除的数据,将其剔除,重新缓存新的用户数据,并更新 table 的用户列表数据。

So,到此为止,我们顺利完成了一个简单的项目。我们用 Gif 图整体来看看。

Angular + NG-ZORRO でバックエンド システムを迅速に開発

【完】

更多编程相关知识,请访问:编程入门!!

以上がAngular + NG-ZORRO でバックエンド システムを迅速に開発の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Angular のメタデータとデコレータについて話しましょう Angular のメタデータとデコレータについて話しましょう Feb 28, 2022 am 11:10 AM

この記事では、Angular の学習を継続し、Angular のメタデータとデコレータを理解し、それらの使用法を簡単に理解します。

Ubuntu 24.04 に Angular をインストールする方法 Ubuntu 24.04 に Angular をインストールする方法 Mar 23, 2024 pm 12:20 PM

Angular.js は、動的アプリケーションを作成するための無料でアクセスできる JavaScript プラットフォームです。 HTML の構文をテンプレート言語として拡張することで、アプリケーションのさまざまな側面を迅速かつ明確に表現できます。 Angular.js は、コードの作成、更新、テストに役立つさまざまなツールを提供します。さらに、ルーティングやフォーム管理などの多くの機能も提供します。このガイドでは、Ubuntu24 に Angular をインストールする方法について説明します。まず、Node.js をインストールする必要があります。 Node.js は、ChromeV8 エンジンに基づく JavaScript 実行環境で、サーバー側で JavaScript コードを実行できます。ウブにいるために

Angular Learning State Manager NgRx の詳細な説明 Angular Learning State Manager NgRx の詳細な説明 May 25, 2022 am 11:01 AM

この記事では、Angular のステートマネージャー NgRx について深く理解し、NgRx の使用方法を紹介します。

Angular で Monaco エディターを使用する方法の簡単な分析 Angular で Monaco エディターを使用する方法の簡単な分析 Oct 17, 2022 pm 08:04 PM

Angularでモナコエディタを使用するにはどうすればよいですか?以下の記事は、最近業務で使用したangularでのmonaco-editorの使い方を記録したものですので、皆様のお役に立てれば幸いです。

Angular のサーバーサイド レンダリング (SSR) について説明する記事 Angular のサーバーサイド レンダリング (SSR) について説明する記事 Dec 27, 2022 pm 07:24 PM

Angular Universal をご存知ですか?これは、Web サイトがより優れた SEO サポートを提供するのに役立ちます。

Angular + NG-ZORRO でバックエンド システムを迅速に開発 Angular + NG-ZORRO でバックエンド システムを迅速に開発 Apr 21, 2022 am 10:45 AM

この記事では、Angular の実践的な経験を共有し、angualr と ng-zorro を組み合わせてバックエンド システムを迅速に開発する方法を学びます。

フロントエンド開発に PHP と Angular を使用する方法 フロントエンド開発に PHP と Angular を使用する方法 May 11, 2023 pm 04:04 PM

インターネットの急速な発展に伴い、フロントエンド開発テクノロジーも常に改善され、反復されています。 PHP と Angular は、フロントエンド開発で広く使用されている 2 つのテクノロジーです。 PHP は、フォームの処理、動的ページの生成、アクセス許可の管理などのタスクを処理できるサーバー側スクリプト言語です。 Angular は、単一ページ アプリケーションの開発やコンポーネント化された Web アプリケーションの構築に使用できる JavaScript フレームワークです。この記事では、PHPとAngularをフロントエンド開発に使用する方法と、それらを組み合わせる方法を紹介します。

プロジェクトが大きすぎる場合はどうすればよいですか? Angular プロジェクトを合理的に分割するにはどうすればよいでしょうか? プロジェクトが大きすぎる場合はどうすればよいですか? Angular プロジェクトを合理的に分割するにはどうすればよいでしょうか? Jul 26, 2022 pm 07:18 PM

Angular プロジェクトが大きすぎます。適切に分割するにはどうすればよいですか?次の記事では、Angular プロジェクトを合理的に分割する方法を紹介します。

See all articles