問題タブ [angularjs-digest]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 別のコントローラーからコントローラーの ng-repeat モデルを更新する方法は?
<div>
独自のコントローラーを備えた2つがあります。最初の div にはng-model="listEntries"
. listEntries
this<div>
のコントローラーで初期化します。
HTML
に を渡し、$scope
に値getList()
を設定します。次に、として使用します。$scope.listEntries
serviceForFirst
listEntries
ng-model
これは私の 2 番目のコントローラーであり、それに関連付けられたサービスです。listAll
を呼び出すたびに、新しい要素をプッシュするつもりaddNew()
です。これが私がやろうとしている方法です。
このための HTML<div>
しかし、最初のリストは更新されていません<div>
。$scope.$apply()
設定するgetList()
前に実行しようとすると$scope.listEntries
、 $digest already in progress エラーが発生します。
実行するとconsole.log()
、各サービスの適切な関数が呼び出されていることがわかりますが、リストは更新されていません。
リストを更新するにはどうすればよいですか?
javascript - クリック イベントをボタンに送信するときに $apply が既に進行中ですか?
ページに id="viewQuestions" を持つボタンがあります。
私のコードは、次のようなキーヒットをチェックしています:
そしてコントローラーで:
コードを実行して ENTER をクリックすると、次のエラーが表示されます。
誰でもこれについてアドバイスをもらえますか。ENTER キーが押されたときにボタンのクリックをシミュレートしたいだけです。フォームで解決策を試しましたが、かなり複雑なニーズを満たしていません。
javascript - カスタム フィルターが無限消化を引き起こすのはなぜですか?
キーと値のペアの配列を、特定のプロパティの最初の文字で値をグループ化するオブジェクトに分割するカスタム フィルターを作成しました。例えば
入力:
[{foo: 'bar'}, {faz: 'baz'}, {boo: 'foo'}]
出力:
{f: [{foo: bar}, {faz: baz}], b: [{boo, foo}]}
ただし、このフィルターは Angular で無限消化エラーを引き起こしているようです。
そして、私はその理由を理解できません。私が見つけたものから、これは通常、フィルターでモデルを変更して ng-repeat を再トリガーすることによって引き起こされますが、私はこれを行っているとは思いません。
angularjs - $scope.$watch で削除されたアイテムを検出する方法は?
$scope.$watch を介して削除または追加されたアイテムを検出する方法はありますか?
以下の例を参照してください。
ありがとう
javascript - ダイジェスト サイクルなしで promise を解決する
AngularJS の promise は、ダイジェスト サイクルが実行されるまで成功/エラーのコールバックが呼び出されないため、ダイジェスト サイクルに関連付けられているようです。これは、$http
または手動で作成されたプロミスなど、プロミスを使用するものはすべて、コールバックを実行するためにダイジェスト サイクルをトリガーする必要があることを意味します。
ダイジェスト サイクルをまったく実行せずに、Angular で promise を使用することは可能ですか? ダイジェスト サイクルを少し後でスケジュールする を使用できることは$applyAsync
わかっていますが、ダイジェスト サイクルをまったく実行せずにthen
コールバックを実行したいと考えています。
基本的に、私は、プロミスの解決が必要であるが必ずしもダイジェスト サイクルの実行が必要ではないかなりの量の非同期動作を使用するアプリから、可能な限り多くのパフォーマンスを引き出す方法を考え出そうとしています。
angularjs - Angular: 複数のディレクティブが一緒に話します。$apply/$emit/$broadcast 混乱
したがって、コントローラーでインスタンス化された 2 つのディレクティブ (Timeline と Displayer) があります。
タイムラインでクリックが発生すると、$emit
コントローラーTimelineClicked
にイベントが送信されます。
コントローラー$on('TimelineClicked', cb)
は、Displayer へ$broadcast
のイベントです。UpdateDisplay
ここには2つの状況があります:
onUpdateDisplay
$digest
UI を更新するロード時などのサイクル中に呼び出すことができます。- しかし、
TimelineClicked
どうやらそれは$digest
edではありません。
$apply
したがって、メソッドを次のようにラップします。
$apply already in progress error
when の状況 1 ではなく it 2 をトリガーします。
if ($scope.$root.$$phase != '$apply' && $scope.$root.$$phase != '$digest')
私見が汚すぎるようなことをすることは考えていません。
- 2 つのディレクティブがどのように連携し、スコープが常に最新であることを確認する必要がありますか?
- $apply サイクルは、イベントのコールバックが終了するのを待ちますか?
apply
他の場所 (の周り)をラップする必要があり$on('TimelineClicked', cb)
ますか?
成功せずにいくつかの構成を試しました...