ngModelのカスタムバリデータロジックを実装する最も簡単な方法を理解しようとします。私は現在のデータを保存する事前定義されたモデル(インターフェイス)を持っているので、新しいFormGroup/FormControl(モデル駆動型)アプローチに対処したくありません。コンポーネント内のAngular2 ngModelバリデータ
必要なすべてのデータが既にある場合、FormControlsとまったく同じスキーマを構築するのはなぜですか?
は、ここに私のコード(https://plnkr.co/edit/fPEdbMihRSVqQ5LZYBHO)です:
import { Component, Input } from '@angular/core';
export interface MyWidgetModel {
title:string;
description:string;
}
@Component({
selector: 'my-widget',
template: `
<h4 *ngIf="!editing">{{data.title}}</h4>
<input *ngIf="editing" type="text" name="title" [(ngModel)]="data.title">
<p *ngIf="!editing">{{data.description}}</p>
<textarea *ngIf="editing" name="description" [(ngModel)]="data.description" (ngModelChange)="customValidator($event)"></textarea>
<button (click)="clickEditing()">{{editing ? 'save' : 'edit'}}</button>
`
styles: [
':host, :host > * { display: block; margin: 5px; }',
':host { margin-bottom: 10px; padding-bottom: 10px; border-bottom: 1px solid #eee; }',
'.ng-invalid { background-color: #FEE; }'
]
})
export class MyWidgetComponent {
@Input() data:MyWidgetModel;
constructor() {
this.editing = false;
}
clickEditing() {
this.editing = !this.editing;
}
customValidator(value:string) {
console.log(this, value); //should be: MyWidgetComponent
//How to set 'invalid' state here?
}
}
あなたは、私はすぐにオン/オフ編集モードをオンにすることができます見ることができると私は直接その場で自分のデータを編集することができたよう。
私の質問は、ngModelのng-valid/ng-invalid状態を自分のコンポーネントから直接管理する方法ですか?
- データモデルが既に存在する場合、FormGroups、FormControlsに同じ構造を持つ新しいローカル変数を作成するのはなぜですか?
- コンポーネント自体に必要なビジネスロジックが実装されているため、すべてのビジネスルールバリデータもここで実装する必要があります。
- 複雑な検証ロジックが多数あります。これらは、入力の純粋なテキスト値と、必須、長さ、パターンなどの簡単なチェックを使用して実装することはできません。
- 上記のことから、すべての実際のビジネスルール検証を解決するには、