2017-06-15 3 views
0

これは、無限ループが発生します -なぜ入力がない場合、ngModelが新しいオブジェクトを渡すときに無限ループを引き起こすのですか?

<child [ngModel]="foo()" ngDefaultControl></child> 
... 
foo() {return new Object();} 
... 
//child implements ControlValueAccessor 

plunkerあなたがこれを実行すると、ページ全体がフリーズします)、これはしません:(plunker

<child [anythingElse]="foo()" ngDefaultControl></child> 
... 
foo() {return new Object();} 
... 
@Input() anythingElse; //on child 

なぜこれが起こるのでしょうか?これはバグですか?

+0

'[ngModel]'の代わりに '[(ngModel)]'を使うとどうなりますか? – trichetriche

+0

@trichetriche '((ngModel)]は双方向データバインディング用です。 'Input'と' ngModel'シナリオの両方で、ここで[property binding]を使っています。式に代入することはできないので、 '[(ngModel)]'はここで壊れてしまいます。 – uber5001

+0

これは私が尋ねる理由です。双方向バインディングは無限ループになりますか? – trichetriche

答えて

0

これはngModelのバグです。 Githubの問題を参照してください:angular/angular#11097

EDIT:新しい値と古い値のディープ比較が等しい場合、foo()が古い値を返す原因となるデコレータを使用しています。 (gist

関連する問題