問題タブ [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.

0 投票する
1 に答える
1081 参照

javascript - 別のコントローラーからコントローラーの ng-repeat モデルを更新する方法は?

<div>独自のコントローラーを備えた2つがあります。最初の div にはng-model="listEntries". listEntriesthis<div>のコントローラーで初期化します。

HTML

に を渡し、$scopeに値getList()を設定します。次に、として使用します。$scope.listEntriesserviceForFirstlistEntriesng-model

これは私の 2 番目のコントローラーであり、それに関連付けられたサービスです。listAllを呼び出すたびに、新しい要素をプッシュするつもりaddNew()です。これが私がやろうとしている方法です。

このための HTML<div>

しかし、最初のリストは更新されていません<div>$scope.$apply()設定するgetList()前に実行しようとすると$scope.listEntries、 $digest already in progress エラーが発生します。

実行するとconsole.log()、各サービスの適切な関数が呼び出されていることがわかりますが、リストは更新されていません。

リストを更新するにはどうすればよいですか?

0 投票する
1 に答える
13814 参照

javascript - クリック イベントをボタンに送信するときに $apply が既に進行中ですか?

ページに id="viewQuestions" を持つボタンがあります。

私のコードは、次のようなキーヒットをチェックしています:

そしてコントローラーで:

コードを実行して ENTER をクリックすると、次のエラーが表示されます。

誰でもこれについてアドバイスをもらえますか。ENTER キーが押されたときにボタンのクリックをシミュレートしたいだけです。フォームで解決策を試しましたが、かなり複雑なニーズを満たしていません。

0 投票する
1 に答える
80 参照

javascript - カスタム フィルターが無限消化を引き起こすのはなぜですか?

キーと値のペアの配列を、特定のプロパティの最初の文字で値をグループ化するオブジェクトに分割するカスタム フィルターを作成しました。例えば

入力:[{foo: 'bar'}, {faz: 'baz'}, {boo: 'foo'}]

出力:{f: [{foo: bar}, {faz: baz}], b: [{boo, foo}]}

ただし、このフィルターは Angular で無限消化エラーを引き起こしているようです。

そして、私はその理由を理解できません。私が見つけたものから、これは通常、フィルターでモデルを変更して ng-repeat を再トリガーすることによって引き起こされますが、私はこれを行っているとは思いません。

0 投票する
4 に答える
344 参照

angularjs - $scope.$watch で削除されたアイテムを検出する方法は?

$scope.$watch を介して削除または追加されたアイテムを検出する方法はありますか?

以下の例を参照してください。

ありがとう

0 投票する
1 に答える
840 参照

javascript - ダイジェスト サイクルなしで promise を解決する

AngularJS の promise は、ダイジェスト サイクルが実行されるまで成功/エラーのコールバックが呼び出されないため、ダイジェスト サイクルに関連付けられているようです。これは、$httpまたは手動で作成されたプロミスなど、プロミスを使用するものはすべて、コールバックを実行するためにダイジェスト サイクルをトリガーする必要があることを意味します。

ダイジェスト サイクルをまったく実行せずに、Angular で promise を使用することは可能ですか? ダイジェスト サイクルを少し後でスケジュールする を使用できることは$applyAsyncわかっていますが、ダイジェスト サイクルをまったく実行せずにthenコールバックを実行したいと考えています。

基本的に、私は、プロミスの解決が必要であるが必ずしもダイジェスト サイクルの実行が必要ではないかなりの量の非同期動作を使用するアプリから、可能な限り多くのパフォーマンスを引き出す方法を考え出そうとしています。

0 投票する
0 に答える
160 参照

angularjs - Angular: 複数のディレクティブが一緒に話します。$apply/$emit/$broadcast 混乱

したがって、コントローラーでインスタンス化された 2 つのディレクティブ (Timeline と Displayer) があります。

タイムラインでクリックが発生すると、$emitコントローラーTimelineClickedにイベントが送信されます。

コントローラー$on('TimelineClicked', cb)は、Displayer へ$broadcastのイベントです。UpdateDisplay

ここには2つの状況があります:

  1. onUpdateDisplay$digestUI を更新するロード時などのサイクル中に呼び出すことができます。
  2. しかし、TimelineClicked どうやらそれは$digestedではありません。

$applyしたがって、メソッドを次のようにラップします。

$apply already in progress errorwhen の状況 1 ではなく it 2 をトリガーします。

if ($scope.$root.$$phase != '$apply' && $scope.$root.$$phase != '$digest')私見が汚すぎるようなことをすることは考えていません。

  • 2 つのディレクティブがどのように連携し、スコープが常に最新であることを確認する必要がありますか?
  • $apply サイクルは、イベントのコールバックが終了するのを待ちますか?
  • apply他の場所 (の周り)をラップする必要があり$on('TimelineClicked', cb)ますか?

成功せずにいくつかの構成を試しました...