検索
ホームページウェブフロントエンドjsチュートリアルAngular で FormArray とモーダル ボックスを使用する方法の簡単な分析

FormArray とモーダル ボックスを一緒に使用するにはどうすればよいですか?次の記事では、Angular の FormArray とモーダル ボックスを組み合わせて使用​​する方法を紹介します。

Angular で FormArray とモーダル ボックスを使用する方法の簡単な分析

#ビジネス シナリオ

FormArray を使用して動的フォームを作成します。フォームが作成されるたびに、新しい入力がページに追加され、フォームのタイトルが表示されます。[編集] をクリックしてジャンプし、フォームの入力内容をクリックします。 [関連チュートリアルの推奨事項: "

angular チュートリアル"]

    // 封装获取modelList
    get modelList() {
        return this.formGroup.get('modelList') as FormArray
    }
    constructor(private fb: FormBuilder) {}
    ngOnInit() {
        // 一开始初始化arr为空数组
        this.formGroup = this.fb.group({
            // 内部嵌套FormControl、FormArray、FormGroup
            modelList: this.fb.array([])
        })
    }
    // 模态框构造内部的表单
    function newModel() {
        return this.fb.group({
            modelName: [''],
            // 可以继续嵌套下去,根据业务需求
        })
    }
    // 省略模态框部分代码
    // 传递到模态框的FormArray
    selectedType: FormArray

フォーム リスト

Angular で FormArray とモーダル ボックスを使用する方法の簡単な分析

フォーム詳細 [モーダルボックス]

<form [FormGroup]="formGroup">
    <div FormArrayName="modelList">
        <ng-container *nfFor="let item of modelList.controls;let i = index" [FormGroupName]="i">
            <nz-input-group
                [nzSuffix]="suffixIconSearch"
              >
                <input type="text" nz-input formControlName="modelName"/>
              </nz-input-group>
              <ng-template #suffixIconSearch>
                <span
                  nz-icon
                  nzType="edit"
                  class="hover"
                  (click)="showModal(i)"
                ></span>
              </ng-template>
        </ng-container>
    </div>
</form>
<nz-modal
  [(nzVisible)]="isVisible"
  nzTitle="Model"
  [nzFooter]="modalFooter"
  (nzOnCancel)="handleCancel()"
  (nzOnOk)="handleOk()"
>
  <ng-container *nzModalContent>
    <form nz-form [formGroup]="selectedType">
      <nz-form-item>
        <nz-form-label nzRequired>Model Test</nz-form-label>
        <nz-form-control>
          <input
            type="text"
            nz-input
            placeholder="请输入ModelName"
            formControlName="modelName"
          />
        </nz-form-control>
      </nz-form-item>
      <nz-form-item>
        <nz-form-control>
          <product-config></product-config>
        </nz-form-control>
      </nz-form-item>
    </form>
  </ng-container>
  <ng-template #modalFooter>
    <button *ngIf="!isNewModel" nzDanger nz-button nzType="default" (click)="handleDelete()">删除</button>
    <button *ngIf="isNewModel" nz-button nzType="default" (click)="handleCancel()">取消</button>
    <button nz-button nzType="primary" (click)="handleOk()">保存</button>
  </ng-template>
</nz-modal>
Angular で FormArray とモーダル ボックスを使用する方法の簡単な分析この種のモーダルボックスは特殊なため、フォームのFormGroupとの関係を区切るため、クリック時に渡す必要があります。パラメータは値の一部を表示するためにモーダル ボックスに送信されます。単純にパラメータを渡し、

this.modelList.at(index)

を使用してエンティティを取得し、値をモーダル ボックスに割り当てると、変更の場合は、モーダル ボックスで [保存] をクリックすると変更が表示されます。値はフォーム内で更新されず、フォーム上の入力値を変更するとモーダル ボックスの内容に影響することがわかります。 ただし、モーダルボックスによって追加されたフォームはページに応答できます。

元のエラー コードのアイデア

    [編集] をクリックした後、クリックした FormArray 要素を一時変数に渡します
  • this.selectedType = this.modelList.at(index);

    を選択し、その値をモーダル ボックス フォームに渡します。

    #クリックしてモーダル ボックスを保存し、元の FormArray 値を再度置き換えます
  • #
    this.modelList.removeAt(this.modelIndex)
    this.modelList.insert(this.modelIndex, this.selectedType)

  • #クリックして追加します。新しい FormGroup オブジェクトを作成します

  • 保存して元のページの FormArray にプッシュを追加します

  • newModelType(): FormGroup {
        return this.fb.group({
          modelName: [&#39;&#39;, Validators.required],
          configList: this.fb.array([]),
        });
      }
    // ...省略
    // 模态框显示
    show() {
        this.isVisible = true
        this.selectedType = this.newModelType();
    }
    // 保存
    save() {
        this.isVisible = false
        // 原页面FormArray
        this.modelList.push(this.selectedType);
    }
  • 最終的に、この書き込みメソッドは一方向で使用される場合、ページ外の入力の変更された値はモーダル ボックスに影響しますが、モーダル ボックスの値は変更されて保存されますが、外部は更新されません。コンソール メソッドを通じてページの FormArray の内部パラメータを確認すると、実際に変更があったことがわかりましたが、Angular はそれを検出しませんでした。このとき、応答がない原因は、角度検出機構が作動していないことが一般的であると判断され、文書を注意深く確認したところ、非常に重要な行

    angular document

    が存在することがわかりました。

と書かれた一番下 最初に読んだとき、私はこの原則に従っていると感じました。編集するときに、元の FormArray を操作して要素を削除したり挿入したりすることを選択したからです。これはこのルールに従いましたが、実際には、モーダル ボックスの割り当てではすでにこの原則に違反しています。値を割り当てるときに、FormArray の要素インスタンスを取得し、それをモーダル ボックスの一時変数に割り当ててから、インスタンスの値を変更しました。本質的に、私は同じインスタンスを操作していました。そのため、Angular は変更を検出しませんでした [値は変更されましたが]

Angular で FormArray とモーダル ボックスを使用する方法の簡単な分析

それでは、正しいアプローチ? ?

Angular で FormArray とモーダル ボックスを使用する方法の簡単な分析

値を割り当てるときに怠惰にならないでください。新しいオブジェクトを再作成してから、元のオブジェクトに割り当てられた値を取得する必要があります。 [ディープコピーに相当]

      this.selectedType = this.newModelType();
      const old = this.modelList.at(index);
      this.selectedType.setValue({
        &#39;modelName&#39;: old.get(&#39;modelName&#39;).value
    })
現時点では正常にアップデートできます。

要約

実際、最終的には本質的に文書への復帰でした。トラブルシューティングのエラーにも落とし穴が多く、中国には基本的に角度のある記事がないため、問題を見つけるには外部フォーラムに頼らなければなりません。

プログラミング関連の知識について詳しくは、プログラミング教育

をご覧ください。 !

以上がAngular で FormArray とモーダル ボックスを使用する方法の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は掘金社区で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール