8410


やりたいことは、ログイン情報など、必ず入っていなくてはいけない情報は起動時に変数に入れておきたいのです。

$promiseを使う方法や、$emitと$onで通信する方法も試してみたのですが、非同期は面倒です。ただの代入でやりたいです。

UI-
Routerのresolveとpromiseを組み合わせるとページ遷移中に通信完了まで待つことが出来るので、今のところそれで実現は出来るのですが、ログイン情報が必要な全ページにresolveを仕掛けるのも面倒なので、もう少し簡便な方法はないものでしょうか？


CC BY-SA 3.0
2015-03-26T02:30:27.497
8405
2015-03-26T23:27:03.293
2232
question
angularjs
AngularJSのngResourceで同期処理


Angularの`$routeProvider`を下記のように`extend`して、必要不可欠なデータの取得を`route`の`resolve`に入れたらどうですか？

[code]

      angular
        .module('app', ['ngRoute', 'ngResource'])
        .config(['$routeProvider','$resource', function($routeProvider, $resource) { 
    
          var url = 'https://my.domain/REST/whatever';        
          var resolvedProvider = angular.extend({}, $routeProvider, {
            when: function(path, route) {
              route.resolve = { required: $resource(url).get({}) };
    
              $routeProvider.when(path, route);
    
              return this;
            }
          });
    
          resolvedProvider.when('/', {
            templateUrl: 'app.html',
            controller: 'AppCtrl'
          }).when('/other', {
            templateUrl: 'other.html',
            controller: 'OtherCtrl'
          }); // ...
        }]);
    
[/code]


CC BY-SA 3.0
2015-03-26T04:09:29.673
8410
2015-03-26T06:24:37.790
2015-03-26T06:24:37.790
3371
3371
8405
answer


Robby Cornelissenさんへ。

ありがとうございます！まさに求めていたものでした。  
$resourceはconfig時に使えない由のエラーが出たので修正して、あとUI-Router用に書き換えて動くことを確認しました。

[code]

    var resolvedProvider = angular.extend({}, $stateProvider, {
      state: function(name, config) {
        config.resolve = {
          required: function($resource) {
            return $resource(url).get({});
          }
        };
        $stateProvider.state(name, config);
        return this;
      }
    });
    
[/code]


CC BY-SA 3.0
2015-03-26T06:19:36.697
8419
2015-03-26T23:27:03.293
2015-03-26T23:27:03.293
2232
2232
8405
answer