2016-04-21 17 views
0

私は写真家が写真をアップロードするために使用できるアプリケーションに取り組んでいます。フロントエンドはAngularJSであり、RESTfull APIバックエンドがあります。RESTリソースのAngularJS ui-router解決

いくつかの問題と、ui-routerがngRouterより優れているため、$ routeproviderをui-routerの$ stateProviderに変更することにしました。

しかし、私の解決策はもう働きません(私はそれが壊れていたと思っていましたが、自分の状況に対する解決策を見つけることができません)。だからここ

は、元の$ routeproviderコードは次のとおりです。

.when('/photographer', { 
    templateUrl : '/static/partials/photographer/photographer_dash.html', 
    controller : 'photographerController', 
    resolve: { 
    photogPrepService: function (PhotogService) { 
     return PhotogService.ownPhotos(); 
    } 
    } 
}) 

PhotogServiceは、以下の$リソースオブジェクトを持つ$リソースサービスです:私は、その後どうなるのコントローラで

return $resource(apiHost, {}, { 
      'ownPhotos': { 
       url: apiHost + '/photographer_own_photos/', 
       method: 'GET', 
       interceptor: ResponseInterceptor 
      } 
}); 

(解決のためにphotogPrepServiceが注入されている):

var promise = photogPrepService; 
promise.then(
function (data) { 
    $scope.ownPhotos = data.data.photos; 
}); 

これはすべてうまくいきました。私は範囲内の写真を手に入れました。

$stateProvider.state('photographer', 
    { 
    url: '/photographer', 
    templateUrl: '/static/partials/photographer/photographer_dash.html', 
    controller: 'photographerController', 
    resolve: { 
     photogPrepService: function (PhotogService) { 
     return PhotogService.ownPhotos(); 
     } 
    } 

は、しかし、それは動作しませんし、私はそれが働くように見えることはできません...ドキュメント(https://github.com/angular-ui/ui-router/wiki#resolve)によると

は以下の通り動作するはずUI-ルータと言ったように

Resource(value) 

私は何とか目を取得するように見えることはできません。解決がコントローラに注入し、私は応答を印刷するにconsole.log()を使用されている場合しかし、私は次の取得します私の値(JSONレスポンス{"photos":...})はコントローラに注入されました。ここでstackoverflowで提案された様々なソリューションを試してみました。ガイドとUI-routerのAPIを読んでいましたが、何がうまくいかないのですか...誰かが私を正しい方向に導くことができれば幸いです。

ありがとう!私はあなたが以下のコードを使用することができると思う

答えて

0

$stateProvider.state('photographer', 
{ 
    url: '/photographer', 
    templateUrl: '/static/partials/photographer/photographer_dash.html', 
    controller: 'photographerController', 
    resolve: { 
    photogPrepService: function (PhotogService) { 
     return PhotogService.ownPhotos().$promise; 
    } 
    } 
}); 

または作るためにあなたのressourcesを変更します。

//the PhotogService will keep the same as before 

//inject the 'PhotogService' into the controller photographerController 
PhotogService.ownPhotos().then(function(data) { 
    $scope.ownPhotos = data.data.photos; 
}); 

//instead of injecting the photogPrepService through 'resove', inject the PhotogService into the controller 
//for the $stateProvider 
$stateProvider.state('photographer', 
{ 
    url: '/photographer', 
    templateUrl: '/static/partials/photographer/photographer_dash.html', 
    controller: 'photographerController', 
} 
+0

あなたの答えをありがとう!同じコントローラを使用する複数の状態が存在する可能性があるため、私は解決策があると考えた理由があります。これらの州のすべてがownPhotos呼び出しを行う必要はありません。 コントローラを使用するたびにownPhotosコールを実行しませんか? – nobody

0

あなたが解決するための約束を与える必要があるが、あなたのressourceは、より多くのようになるはずです彼らは約束します。

+0

ありがとうございます。私は州の$ promiseを使ってみました。ただし、動作しません。それでもAPIコールは 'Resource(value)'として返されます。しかし、解決策では '$ promise'が返されますが、注入された後は返されません。 私はリソースの変更について検討します。ありがとう! – nobody

関連する問題