2017-08-01 12 views
0

ngResourceを依存関係として使用してバックエンドからデータを取得するファクトリを持つ方法で、AngularJsアプリケーションを構築しました。このファクトリはサービスにインジェクトされ、最後にこのサービスはコントローラにインジェクトされます。ngResourceを使用したコントローラからのAngularJs解決サービス

問題は、バックエンドコールに時間がかかるため、結果がコントローラに反映されないことです。私はサービスの約束事を管理しているし、コンソールでそれを印刷することができ、コントローラのこの約束の処理を避けたい、$ qの使用法がこの問題を解決するためにAngularJsのために存在するAngular(2/4)のようなより派手な解決策があるかどうかを知りたいと思います。

は、私はそれがAngularJSの中核にありますので、(angularjs $ Qとの)約束を使用するための別の方法を見ることができないあなたに

+0

コードに起因する問題について質問するときに、人々が問題を再現するために使用できるコードを提供すれば、より良い回答が得られます。 [最小限の完全かつ検証可能なサンプルを作成する方法](https://stackoverflow.com/help/mcve)を参照してください。 – georgeawg

+0

Angular 2+は[ES6 promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)を使用しています。 AngularJSは、AngularJSフレームワークと統合された[$ qサービス約束](https://docs.angularjs.org/api/ng/service/$q#the-promise-api)とそのダイジェストサイクルを使用します。 AngularJSの実行コンテキストで適用される操作のみが、AngularJSのデータバインディング、例外処理、プロパティの監視などの恩恵を受けます。申し訳ありませんが、約束は好きではありませんが、どちらのフレームワークでも現実的です。 – georgeawg

答えて

1

ありがとうございます。

私はこの点について十分明白な文書を見つけました:ngResource。しかし、ngResourceは、あなたに約束を与える$httpのラッパーです。一方、ngResourceでは、コールバックのショートカットを使って簡単にこの手順を省略できます。

anglejsですばらしい解決策を希望する場合は、$ resource/$ httpの使用をやめ、fetchasync awaitという概念を見てください。

もう1つの解決策がありますが、それはあなたのメインスレッドをブロックするために非常に古い学校の方法です。

NB:あなたが引用したAngular$qと気の利いた方法について、非常に不思議です。

+1

fetch APIとasync/awaitの両方の構造体は、AngularJSフレームワークと統合されていないES6約束を使用します。一方、$ qサービス約束はAngularJSフレームワークと統合されています。 AngularJSの実行コンテキストで適用される操作のみが、AngularJSのデータバインディング、例外処理、プロパティの監視などの恩恵を受けるでしょう。 – georgeawg

+0

なぜ、それらがフレームワーク全体を書き直したのかがわかります。 ngResourceに基づいています。とにかくあなたの答えの岩石ありがとう – Habchi

関連する問題