2016-06-14 6 views
4

私はAngular2を使用してWebアプリケーションを作成しています。私はいくつかのデータ入力画面を持っています。ここでは、ユーザーはCompanyやPersonのようなエンティティの大きなデータエントリの一部である郵便アドレスを入力する必要があります。AngularJSを使用して再利用可能なネストされたサブフォームコンポーネントを作成する方法2

当然私は、サブフォームとして再利用することができ、何らかの形で埋め込み、またはより大きなフォームに含めることができるアドレスフォームコンポーネントを作成したいと考えています。これは可能であるはずですが、私は例を見つけたり、例を見つけたりできなかったようです。 FormBuilderを入力として持つサブコンポーネントを作成しようとしましたが、これは機能しません。

私の問題は、私のhtmlテンプレートに同封の<フォーム>タグを正常に伝えることができないことです。

誰でもこれについてのアプローチを知っていますか?唯一<ため

答えて

4

=角度< = 2.0.0 RC

これは良いアプローチであれば、私は知りませんが、それは動作しているよう

@Component({ 
    selector: 'address-form', 
    providers: [], 
    styles: [':host {display: inline-block; border: 1px solid blue;}'], 
    template: ` 

    <input [ngFormControl]="street"> 
    <input [ngFormControl]="zip"> 
    `, 
    directives: [] 
}) 
export class AddressForm { 
    street = new Control('', Validators.minLength(3)); 
    zip = new Control('', Validators.required); 
    isSet:boolean; 
    @Input() group; 
    constructor() {} 

    ngOnChanges() { 
    setTimeout(()=> { 
     this.group.control.addControl('street', this.street); 
     this.group.control.addControl('zip', this.zip); 
    }); 
    } 
} 
<form #f="ngForm"> 
    <input ngControl="custId"> 
    <address-form ngControlGroup="address" #addrGroup="ngForm" [group]="addrGroup"></address-form> 
    </form> 

Plunker example

また、PlunkerとのKaraのこのコメントも参照してください。https://github.com/angular/angular/issues/10251#issuecomment-238737954

+0

punkerは実行されていません。次のエラーを表示しています。 'GET https://npmcdn.com/@angular /[email protected]/core.umd.js 404() ' –

+0

古いAngularバージョンでのみ動作します。私はより良いアプローチは、とにかく子コンポーネントで 'ControlValueAccessor'を実装することだと思います。 –

+0

私はここでもテンプレート駆動アプローチを見つけました。どちらがとても良いですか。 http://stackoverflow.com/questions/42352680/angular2-template-driven-sub-form-component-with-validation。変更されたPlunkerはここにあります:https://plnkr.co/edit/vuCLmgSckv63GjMipa0m?p=preview –

関連する問題