2013-07-19 8 views
13

私はrouteproviderで働いている解決を持っていますが、私はその成功か失敗か分かりませんので、私は約束を返すだけです。これは、私は今この仕事をAngularJS:RouteProviderで解決 - 成功/失敗を検出していますか?

.when('/items', { 
    templateUrl: 'views/items.html', 
    controller: 'ItemsCtrl', 
    resolve: { 
     resolvedData: function(Restangular) { 
      return Restangular.one('Items').get(); 
     } 
    } 
}) 

を行いましたが、どのように私は成功したか失敗したかを検出しない...私は解決の方法でこれを入力することができますが、私は成功と失敗に何を返します...思い出しものです私は自分のコントローラにアイテムを注入する必要があります。

.when('/items', { 
    templateUrl: 'views/items.html', 
    controller: 'ItemsCtrl', 
    resolve: { 
     resolvedData: function(Restangular) { 
      Restangular.one('Items').get().then(function(data) { 
       // success 
      }, function() { 
       // failure 
      }); 
     } 
    } 
}) 

私はここに例を見ましたが、これが私の必要としている使い方であれば混乱しますか?

AngularJS - rejected $http promise with $routeProvider:resolve

それは手動約束を返しているように見えます。

resolve: { 
    response: ['Warranty' 
     '$q', 
     function(Warranty, $q) { 
      var dfd = $q.defer(); 
      Warranty.sendRequest().then(function(result) { 
       dfd.resolve({ 
        success: true, 
        result: result 
       }); 
      }, function(error) { 
       dfd.resolve({ 
        success: false, 
        reason: error 
       }); 
      }); 
      return dfd.promise; 
     } 
    ] 
} 

私は本当に誰でも助けていただければ幸いです。

本当にやりたいことは、コントローラに注入された解決済みの変数を持っています。それが失敗すると、コントローラのエラーにアクセスしたいので、ユーザに表示できません問題のためにレンダリングすることはできません。

答えて

10

あなただけthenメソッドの戻り値を返すことができます

resolve: { 
    resolvedData: function(Restangular){ 
     return Restangular.one('Items').get().then(function (data) { 
      ... 
      return successData; // resolvedData will be resolved with the successData 
      }, function() { 
      ... 
      return failureData; // resolvedData will be resolved with the failureData 
      }); 
    } 
} 

then方法doc

このメソッドは、戻り値を経由して解決したり拒否され、新たな約束を返します。 successCallbackまたはerrorCallback

+1

ああ、私の注射の価値が成功か失敗かどうかを私はどのように特定するでしょうか? – Martin

+2

{success:true、data:...}のようなオブジェクトを返します。 –

2

解決機能が失敗した場合は、エラーメッセージのようにそれに応じてユーザーに何かを表示したいことがあります。 解決関数が(thenなしの)約束を返し、内部イベント$routeChangeErrorを使用する方が良いでしょう。

myApp.run(['$rootScope',function($rootScope) { 
    $rootScope.$on('$routeChangeError', function() { 
    // what you want to do if an error occurs 
    // ex: $rootScope.displayErrorMessage = true 
    }); 

])

また、()ネットワークエラー/サーバーダウンなどのような一般的なエラーに対処するために容易になります。

関連する問題