2016-04-30 71 views
0

我想在退出角度控制器之前等待http響應。我寫了下面的代碼。但是id不起作用,因爲控制器在返回http調用之前仍然退出。任何人都可以幫我解決這個問題嗎?提前致謝。角度控制器服務承諾不起作用

var app = angular.module('app', []); 

app.factory('MyService', function ($http) { 
     return $http.get('/api/endpoint').then(function(res){ 
      return res.data; 
     }); 
    }); 

app.controller('MyController', ['$scope', '$http', 'MyService', function($scope, $http, MyService){ 
    MyService.then(function(data){ 
    $scope.myVarialbe = data; 
    }) 
}]); 
+0

檢查您控制檯登錄錯誤 –

+0

在控制檯中沒有錯誤。檢查。 – ChE

+0

嗨,我重新創建您的方案使用$超時而不是$ http。我正在得到預期的結果。請參閱http://plnkr.co/edit/8Wx4P71rfTCNovlfoxIH?p=preview – Vaibhav

回答

0
I would write this as below. 
    'use strict'; 

    (function() { 

     function MyService($http) { 

     function getService() { 

      var url = yourURL; 
      return $http({ method: 'GET', cache: false, url: url }); 
     } 

      return { 
       getService: getService 

      }; 
     } 

     angular.module('app') 
      .factory('MyService', MyService); 
    }()); 

controller code: 

     MyService.getService().then(function(response) { 

     }); 
0

您可以使用這樣factory只是返回請求響應promise控制器使用.then返回promise

var app = angular.module('app', []); 

app.factory('MyService', ['$http',function($http) { 
    return { 
     getData: function() { 
      return $http.get('/api/endpoint'); 
     } 
    }; 
}]); 

app.controller('MyController', ['$scope', '$http', 'MyService', function($scope, $http, MyService){ 
    MyService.getData().then(function(response){ 
    $scope.myVarialbe = response.data; 
    }); 
}]); 
-1

使用$ q更好。

如:

app.factory('MyService', ['$http', '$q', function($http, $q) { 
return { 
    getData: function() { 
     var deferred = $q.defer(); 
     $http.get('/api/endpoint') 
      .then(function(resp) { 
       deferred.resolve(resp.data); 
      }); 
     return deferred.promise; 
    } 
    }; 
}]); 

app.controller('MyController', ['$scope', 'MyService',function($scope, MyService){ 
    MyService.getData().then(function(data){ 
     $scope.myVarialbe = data; 
    }) 
}]);