0

私は、私は他を解決するために、データを持って前に、一つの項目を解決する必要がある状態があります。だから、最初、私は認証オブジェクトを取得したいとだけAngularjs 2段階の解決(依存関係の解決)

 .state('addtrip', { 
     url: '/addtrip', 
     templateUrl: 'views/addtrip.html', 
     controller: 'AddtripCtrl', 
     resolve: { 
      auth : function($state, Auth){ 
      return Auth.$requireAuth().then(function(auth) { 
       return Auth; 
      }, function(error){ 
       $state.go('login'); 
      }); 
      }, 
      trips : function(rootRef,$firebaseArray){ 
      return $firebaseArray(rootRef).child(auth.uid).$loaded(); 
      } 
     } 

を私は特定のユーザーの旅行を取得したいと思った後。

このような状況を処理する最善の方法は何ですか?

答えて

1

(コードで悪いインデントのため申し訳ありません)男は、内部機能そのが働いていない

.state('addtrip', { 
 
     url: '/addtrip', 
 
     templateUrl: 'views/addtrip.html', 
 
     controller: 'AddtripCtrl', 
 
     resolve: { 
 
      auth :function($state, Auth,rootRef,$firebaseArray,$q){ 
 
      return Auth.$requireAuth().then(function(auth) { 
 
       var p = new Promise (resolve, reject) 
 
       resolve({ 
 
       auth: auth, 
 
       trips: $firebaseArray(rootRef).child(auth.uid).$loaded(); 
 
       }); 
 
      return p; 
 
      }) 
 
     } 
 

 
    } 
 
}

0

より約束の入れ子で試してみましょう。それは、

.state('addtrip', { 
    url: '/addtrip', 
    templateUrl: 'views/addtrip.html', 
    controller: 'AddtripCtrl', 
    resolve: { 
     auth :function($state, Auth,rootRef,$firebaseArray,$q){ 
      var defer = $q.defer(); 
      var obj = []; 
      Auth.$requireAuth().then(function(auth) { 
      obj.push(auth); 
      var a = $firebaseArray(rootRef).child(auth.uid).$loaded(); 
      obj.push(a); 
      defer.resolve(obj); 
     }); 
     return defer.promise; 
     } 
} 

OR、

.state('addtrip', { 
     url: '/addtrip', 
     templateUrl: 'views/addtrip.html', 
     controller: 'AddtripCtrl', 
     resolve: { 
      auth :function($state, Auth,rootRef,$firebaseArray,$q){ 
      return Auth.$requireAuth().then(function(auth) { 
    return { 
      auth: auth, 
      trips: $firebaseArray(rootRef).child(auth.uid).$loaded(); 
      }; 
      }) 
     } 

} 
     } 
+0

上の約束を返すのを忘れていました。彼は認証だけを解決しますが、トリップを追加するとその失敗を解決します。 – user4550050

+0

あなたはエラーを投稿できますか? – Ved

+0

エラーはありませんが、ページはアップロードされません。 – user4550050

1

私は道がfirebase websiteに説明し、その後、ちょうどあなたの旅行の機能にcurrentauthとwaitforauthを使用使用しているすべての最初に動作するはずです。あなたはあなたのプログラムに合うように少し変更する必要がありますが、私はそれを自分で使います。このように動作します。上記

.run(["$rootScope", "$state", function($rootScope, $state) { 
    $rootScope.$on("$stateChangeError", function(event, toState, toParams, fromState, fromParams, error) { 
     // We can catch the error thrown when the $requireAuth promise is rejected 
     // and redirect the user back to the home page 
     if (error === "AUTH_REQUIRED") { 
      $state.go("login"); 
     } 
    }); 
}]) 


    .state('addtrip', { 
    url: '/addtrip', 
    templateUrl: 'views/addtrip.html', 
    controller: 'AddtripCtrl', 
    resolve: { 
     "currentAuth": ["firebaseRef", function (firebaseRef) { 
         // $requireAuth returns a promise so the resolve waits for it to complete 
         // If the promise is rejected, it will throw a $stateChangeError (see above) 
         //return firebaseRef.refAuth().$requireAuth(); 
         return firebaseRef.refAuth().$requireSignIn(); 
        }], 
        "waitForAuth": ["firebaseRef", function (firebaseRef) { 
         // $requireAuth returns a promise so the resolve waits for it to complete 
         // If the promise is rejected, it will throw a $stateChangeError (see above) 
         return firebaseRef.refAuth().$waitForSignIn(); 
        }], 
     trips : function(currentAuth, waitForAuth, rootRef,$firebaseArray){ 
     return $firebaseArray(rootRef).child(currentAuth.uid).$loaded(); 
     } 
    } 
関連する問題