[解決済み] Angular.jsでAJAXの呼び出しを行う際のベストプラクティスは何ですか?
質問
この記事を読んでいました。 http://eviltrout.com/2013/06/15/ember-vs-angular.html
と書いてあった。
規約がないため、どれだけのAngularプロジェクトがあるのでしょう。 コントローラ内で直接AJAXを呼び出すような悪い習慣に依存しているのでしょうか? 依存性注入のために、開発者はルータを注入しているのでしょうか? パラメータをディレクティブに組み込むことはできますか?初心者のAngularJS開発者が 経験豊富なAngularJS開発者のようにコードを構成することができます。 が慣用的であると信じているのでしょうか?
実際に作っているのは
$http
をAngular.jsのコントローラから呼び出します。なぜそれが悪い習慣なのでしょうか?を作成するためのベストプラクティスは何ですか?
$http
の呼び出しとその理由を教えてください。
どのように解決するのですか?
EDIT: この回答は主にバージョン 1.0.X に焦点を当てていました。混乱を避けるため、本日 2013-12-05 時点で現在のすべての Angular のバージョンに対するベストアンサーを反映するように変更しました。
アイデアは、返されたデータへのプロミスを返すサービスを作成し、コントローラでそれを呼び出し、そこでプロミスを処理して $scope プロパティにデータを入力することです。
サービス
module.factory('myService', function($http) {
return {
getFoos: function() {
//return the promise directly.
return $http.get('/foos')
.then(function(result) {
//resolve the promise as the data
return result.data;
});
}
}
});
コントローラーです。
プロミスの
then()
メソッドを呼び、データを取り出します。scopeプロパティを設定し、他に必要なことを何でもします。
module.controller('MyCtrl', function($scope, myService) {
myService.getFoos().then(function(foos) {
$scope.foos = foos;
});
});
In-View Promise Resolution (1.0.Xのみ)。
Angular 1.0.Xでは、プロミスはビューで特別な扱いを受けることになります。それらが解決するとき、その解決された値はビューにバインドされます。 これは1.2.Xで非推奨となりました。
module.controller('MyCtrl', function($scope, myService) {
// now you can just call it and stick it in a $scope property.
// it will update the view when it resolves.
$scope.foos = myService.getFoos();
});
関連
-
[解決済み] Angular ng-repeatの条件付きラップアイテム(ng-repeatのグループアイテム)。
-
[解決済み] クラスを条件付きで適用する場合の最適な方法は何ですか?
-
[解決済み] angular-routeとangular-ui-routerの違いは何ですか?
-
[解決済み] MVWとは何の略ですか?
-
[解決済み】AngularJSのディレクティブスコープにおける「@」と「=」の違いは何ですか?
-
[解決済み】AngularJSのスコーププロトタイピング/プロトタイピング継承のニュアンスとは?
-
[解決済み】複数の引数でAngular.jsのフィルタを呼び出すには?
-
[解決済み】Angular.jsのディレクティブでngは何の略か?
-
[解決済み] restfulなPOSTレスポンスのための「ベスト」プラクティス
-
[解決済み】AngularJSで属性を条件付きで適用するための最良の方法は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Angular JS $locationChangeStart 次の url ルートオブジェクトを取得する
-
[解決済み] AngularJSのディープリンクとは何ですか?
-
[解決済み] AngularJSのリソースプロミス
-
[解決済み] controllerAs "プロパティを使用する理由は何ですか?
-
[解決済み] AngularJS 。scope.apply()呼び出し時の$digest already in progressエラーを防ぐ。
-
AngularJS がエラー $digest already in progress を報告する
-
[解決済み] AngularJSとHandlebars - 両方必要なのかどうか
-
[解決済み] angular.serviceとangular.factoryの比較
-
[解決済み] ServiceとFactoryで迷う
-
[解決済み] Angularjsのコード/命名規則があるのか?[クローズド]