猿问

处理服务中的$http响应

处理服务中的$http响应

我最近发表了一篇关于我面临的问题的详细描述。这里在这样的时候。因为我无法发送一个真实的$http请求时,我使用超时值来模拟异步行为。从我的模型到视图的数据绑定是正确的,这是在@glupy的帮助下进行的。

现在,当我用$http而不是$timeout(在本地测试),我可以看到异步请求是成功的,并且data在我的服务中充满了JSON的响应。但是,我的观点并没有更新。

更新Plunkr这里


慕后森
浏览 513回答 3
3回答

侃侃无极

因为它是异步的,所以$scope是在Ajax调用完成之前获取数据。你可以用$q在您的服务中创建promise并将其返回给控制器,控制器在then()反对promise.为你服务,app.factory('myService', function($http, $q) {   var deffered = $q.defer();   var data = [];     var myService = {};   myService.async = function() {     $http.get('test.json')     .success(function (d) {       data = d;       console.log(d);       deffered.resolve();     });     return deffered.promise;   };   myService.data = function() { return data; };   return myService;});然后,在您的控制器中:app.controller('MainCtrl', function( myService,$scope) {   myService.async().then(function() {     $scope.data = myService.data();   });});
随时随地看视频慕课网APP
我要回答