2017-02-02 1 views
1

私は、ユーザによって動的にフォームを生成した:生成されたJSONは私がNG2-dragulaディレクティブを追加したNG2-dragulaとダイナミックなフォルム同期なしで直接

{ 
    "message": [ 
    { 
     "type": 1, 
     "value": "first message", 
    }, 
    { 
     "type": 1, 
     "value": "second message", 
    } 
    ] 
} 

のようなものである

// this._fb is a FormBuilder 
    ngOnInit():void { 
    this.myForm = this._fb.group({ 
     message: this._fb.array([ 
     ]) 
    }); 

メッセージの順序を変更するには

ドラッグ機能はうまく機能していますが、私がd私のフォームのjsonをisplaying、それはまだ私はフィールドの内容を変更し始める場合を除いて、古い順序です。その場合、フォームが更新されます。

+0

だけで簡単に推測:: '[dragulaModel] = 'myForm.controls私の形で

は、私が実際にリスト内のIDに対応する値「順序」はので、私は次のように行われているがあります。 message.controls''は片方向バインディングです。ここでバインドする2つの方法やイベントを使用してモデルを更新できますか? – Riscie

+0

私はangular2にはかなり新しくなっています。双方向バインディング '[(ngModel)]を使うとどういう意味ですか? 奇妙なことは、フィールドの編集を開始するときに、すべてが正しい順序に変更されるということです – Alexis

答えて

1

私は解決策を見つけました。それは最高のものではないと思いましたが、私は全く新しい角度になりましたが、少なくとも機能しています。

私は、フォームからイベントを発行する方法を見つける必要があることを理解しています。

_dragulaService.dropModel.subscribe((value:any) => { 
     console.log(value); 
     this.onDropModel(value.slice(1)); 
    }); 
    } 

    private onDropModel(args:any):void { 
    for (let i = 0; i < (<FormArray>this.myForm.get('message')).length; ++i) { 
     (<FormArray>this.myForm.get('message')).at(i).patchValue("order", i); 
    } 
    } 
関連する問題