0

angularjs に問題があり、入力にファクトリとディレクティブを作成しました。私のディレクティブでは、入力の値が変更されたときに、コントローラーの値を更新したいと考えています。しかし、実際には、私はコントローラーで 1 つのイベントが遅れています。私は自分自身を説明します:

  • 入力に「A」を録音すると、親コントローラーの値が変化しません
  • 「B」をテープにすると、親コントローラーの値は「A」になります
  • 「C」をテープにすると、親コントローラーの値は「AB」になります...

問題を示すために plinkr を作成しました。

http://plnkr.co/edit/h0r0Gu7VqvWkkgshQtRC?p=preview

ありがとうございました

4

1 に答える 1

3

ここにはいくつかの間違いがあります

  1. 独自の属性を呼び出さないでくださいng-modelngModelModelController をフォームフィールドにアタッチするためにすでに使用されています。同じ属性を別の目的に単純に使用したり、競合が発生した場合に驚いたりすることはできません:)

  2. ngModel-Directive は、入力フィールドの値をスコープのプロパティにバインドする処理を既に行っています。でそれを行う必要はありませんelement.keydown

  3. element.keydownで行っていたことが有効であったとしてもscope.$apply()、変更がアプリ全体に反映されるように、コールバック全体をラップする必要があります。これが、観察している遅延の主な原因です。

これらの具体的な点とは別に、この例の書き方は、AngularJS のいくつかの基本的な概念の誤解を示しています。これらすべてを一から説明すると、この回答の範囲を超えてしまいます。ディレクティブを読んで、AngularJS の組み込みディレクティブのいくつかがどのように実装されているかを調べることをお勧めします。ソースコードはこちらで見ることができます

于 2013-08-11T18:35:12.247 に答える