問題タブ [angularjs-timeout]

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 に答える
1659 参照

angularjs - angularjs は、ダイジェストが終了した後に変更を保存します

これは、角度のあるアプリで非常に一般的なユースケースになると思います。いくつかのダイジェスト サイクルの一部として変更されたスコープ上のいくつかのオブジェクトを見ているだけです。それらの消化 (データバインディングによる値の変更) が完了したら、それらをデータベースに保存したいと思います。

A.現在、現在のソリューションでは、次の問題が発生しています。

  1. $timeout() での保存の実行 - 保存が一度だけ呼び出されることを保証する方法

  2. $scope.$evalAsync でカスタム関数を実行する - 何が変更されたかを調べる方法

もちろん、これらの問題の両方に対する解決策はありますが、私が知っているものはどれも私には十分にエレガントに見えません.

問題は次のとおりです。問題に対する最も洗練された解決策は何ですか?

B. 特に、ベストプラクティスは何ですか?

  1. save がダイジェスト サイクルで 1 回だけ呼び出されるようにする

  2. 最後のダイジェスト後にオブジェクトがダーティであることを確認する

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

angularjs - AngularJS: $timeout の呼び出しが必要な理由と時期は?

ライブデモ

confirmationDialogHeader次のように使用されるディレクティブを作成しました。

ボタンをクリックすると、確認ダイアログが開き、ユーザーが確認すると、 を呼び出しdeleteItem($index)てダイアログを閉じます。

私の問題は最後のビットにあります:ダイアログを閉じます。

コントローラー (CoffeeScript) は次のとおりです。

そして、ここにディレクティブがあります:

ご覧のとおり、ダイアログは終了後に閉じられずdeleteItem()、実行$scope.confirmationDialog = offされます。

興味深いのは、 を$scope.items.splice(index, 1)でラップすると$timeout、ダイアログ適切に閉じられることです。

なぜこの$timeoutラッピングがここで必要なのですか?

いつコードをラップするべきかについてのガイドラインはあります$timeoutか?


を使用するこのディレクティブの作業バージョン$dialog


0 投票する
2 に答える
70598 参照

angularjs - AngularJS の $evalAsync と $timeout の違いは何ですか?

私は AngularJS をしばらく使用してきましたが、時々$timeoutを使用する必要があることがわかりました(通常は jQuery プラグインを初期化する必要があるようです)。

最近、私はダイジェスト サイクルをより深く理解しようとしており、$evalAsync関数に出会いました。

その関数は と同様の結果を生成するよう$timeoutですが、遅延を与えないだけです。使用するたびに$timeout遅延が0だったので、代わりに使用する必要があったかどうか疑問に思ってい$evalAsyncます。

両者の間に根本的な違いはありますか?どちらのケースを使用しますか? どちらをいつ使うべきか、より良い感覚を得たいと思います。

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

angularjs - ng-init 値が設定されるのを待つ正しい方法は何ですか?

HTMLに、Angular.js データ モデルの「 data.id 」の値を初期化する「ng-init」ディレクティブがあります。今のところ、これがどのように機能するかを変更できないとしましょう。

ここで、ページが読み込まれたらすぐに HTTP リクエストを作成したいと考えています。ここで、URL はこの data.id 値に依存します。これまでのところ、次のように動作しているようです。

ただし、タイムアウトがゼロのタイマーを使用するのは扱いにくいようです。(そして、$timeout コードを省略して、単純に $http.get を直接呼び出した場合、$scope.data.id はもちろん未定義です)。

$http リクエストを発行する前に ng-init が実行されるまで待つより良い方法はありますか? また、上記のタイムアウトベースのコードは、すべての場合/すべてのブラウザーなどで動作することが保証されていますか?

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

angularjs - AngularJS は、$timeout の可変期間を取ることができないようです

ユーザーにさまざまな通知を表示する機能をコントローラー内に実装しようとしています。

問題は、期間を関数パラメーターにしたいのですが、うまくいかないようです。

どうして?。

どうすればこれを修正できますか?.

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

angularjs - $timeout を使用した AngularJS での mocha を使用した単体テスト サービス (e2e テストなし) が終了しない

AJAX を介してデータベースを呼び出す必要があるサービスがあり、これはそのテストです。

エラーで失敗します(モカdoneは呼び出されないため):

私が電話する$timeout.flushかどうかは問題ではありません。呼び出し$timeout.flushの後に呼び出すと (AJAX がまだ返されていないため)、エラーがスローされ、 console にログが記録されNo deferred tasks to flushます。

私はすでにロードangular-mocks.jsしてkarma.conf.jsおり、それらは同じバージョンです(角度とモック、を使用して最新の状態に保たれていますbower update)。

CEP サービス内では、ajax が呼び出された後、コールバックが a 内で実行され$timeout(-> cb(data))、何らかの理由で呼び出されることはありません。私は困惑しています。

ここ SO で見たすべての問題は、e2e、ジャスミン、および$httpBackendモックを使用した同期テストに関連しています。テストのために実際に PHP スクリプトを呼び出す必要があります。また、「プロキシ」をオンに設定しましたkarma.conf.js

開発ツール コンソールは、リクエストが実行されていることを示していますが、停止しています。$timeout