2017-02-09 11 views
1

私の人生にとって、私は無効なFormArrayを作成できるはずです。私は1-nサブ配列(またFormArray)でビュー専用の親フォーム(FormArray)を構築しようとしています。サブアレイを子コンポーネントに渡してコントロールを初期化します(FormControl)。私は別のオプションを使用して、ライフサイクルの異なるフックで親フォーム上disable()を呼び出して試してみた子コンポーネントを持つ無効なフォームを作成するにはどうすればよいですか?

、それがこの例外をスロー:それは確認した後

発現が変更されました。以前の値: 'true' 現在値:「偽」です。 、フォームを作成する>無効にしない、ngOnInitに例外

  • を投げる - ngOnInit

    • を、両方のフォームを作成し、無効にします。

  • ここのは、私が試したもののいくつかのカップルの例であり、 ngAfterViewInitに無効化フォーム - >は無効んが、例外

    フォームの古いバージョンのオプションは、これはもはやなく、動作します(悲しいことに)反対しない、と受け入れスロー次のようになります:new FormArray({ value: myControlsArray, disabled: true })

    私はコンポーネント階層とモデルをモデル化するためにplnkrを作成しました。

    無効になっているフォームを初期化する方法を知っている人はいますか?


    編集(回答):私は情報の重要な部分を見落とし、解決方法を見落としました。私の使用例では、保存されたフォーム値を取り、新しい読み取り専用フォームを初期化します。保存されたフォームの値を子コンポーネントに渡す代わりに、親フォームとそのサブフォームとコントロールを作成する必要があります。

    +0

    app.component.ts:

    public questions: Array<string[]> = MULTIPLE_RADIOS; public responses: Array<string[]> = MULTIPLE_RESPONSES; constructor(private _fb: FormBuilder) {} ngOnInit() { this.form = this._fb.array([]); for (let response of this.responses) { const questionForm = this._fb.array([]); for (let responseControl of response) { questionForm.push(this._fb.control(responseControl)); } this.form.push(questionForm); } this.form.disable({ emitEvent: false }); } 

    アプリ-radio.component.tsここでそれがどのように見えるかの抜粋とworking exampleですまずそれを作成してから無効にする必要があります。 –

    +0

    @RomanC私の質問が、私が使用している現在の方法であることが明らかになったことを願っています。発生している変更検出例外に注意してください。理想的には、無効状態でフォームを初期化する方法がありますが、現実的には、 'disable()'メソッドをどこで呼び出すかを決める手助けが必要です。 – stealththeninja

    答えて

    0

    を参照してください、私は新しい読み取り専用フォームを初期化するために保存されたフォームの値を使用しています。コントロールを初期化するために値を子コンポーネントに渡すのではなく、親フォームとサブフォームと同時にコントロールを構築することで、これを解決しました。そうすることで、私はngOnInitで親フォームを無効にして、変更の検出を行わずにサブフォームを子コンポーネントに引き渡すことができます。あなたは無効にフォームを作成することはできません

    @Input() 
    public form: FormArray; 
    
    @Input() 
    public radios: string[]; 
    
    constructor(private _fb: FormBuilder) {} 
    
    ngOnChanges() { 
        // same component used to create a live form 
        // in this case, its parent (app-question.component) gives 
        // it an empty form, and the child adds the control it needs 
        if (this.form.length === 0) { 
        this.form.push(this._fb.control('')); 
        } 
    } 
    
    0

    formを無効にすることはできません。しかし、inputfieldset)の無効セットを作成することができます。これは、あなたのグループがフォームと同じ大きさであれば同じであることが分かります。

    <fieldset [disabled]=[true]> 
        <input type="text" ...> 
        <input ...> 
    </fieldset> 
    

    編集に述べたようThere is some way to disabled set of inputs in angular 2?

    +0

    HTMLの基本については賢明でありがたいことですが、これは私の問題を解決しませんでした。角度2は '

    'の' disabled'属性をフォームにバインドしませんでした。機能的に無効になっている間は、無効状態の視覚的スタイリングは適用されませんでした。 – stealththeninja

    関連する問題