Javascript AngularJs服务中从WebApi接收数据时出现问题
我将在我的应用程序中使用AngularJS服务,使一切都干净整洁。。为此,我看了一些文章。但它似乎还没有完成。对吧??Javascript AngularJs服务中从WebApi接收数据时出现问题,javascript,angularjs,asp.net-web-api,angularjs-service,angular-promise,Javascript,Angularjs,Asp.net Web Api,Angularjs Service,Angular Promise,我将在我的应用程序中使用AngularJS服务,使一切都干净整洁。。为此,我看了一些文章。但它似乎还没有完成。对吧?? 我没有看到任何错误或东西,但当我设置警报(数据);我将得到未定义的错误。我错过的工作在这里做什么 我的App.js var app = angular.module('starter', ['ionic']) My Service.js var serverPath = 'http://url/api/locations'; app.service('testService
我没有看到任何错误或东西,但当我设置警报(数据);我将得到未定义的错误。我错过的工作在这里做什么 我的App.js
var app = angular.module('starter', ['ionic'])
My Service.js
var serverPath = 'http://url/api/locations';
app.service('testService', function($http) {
this.getLocations = function() {
$http.get(serverPath).success(function(data) {
return data;
});
};
});
My controller.js
app.controller('LocationsController', function ($scope, testService) {
$scope.locations = testService.getLocations();
});
还有我的用户界面
<div ng-controller="LocationsController">
<ul>
<li ng-repeat="location in locations">
{{ location.locationName }}
</li>
</ul>
</div>
-
{{location.locationName}
一旦请求数据,就无法直接从异步调用中获取数据。您应该遵循promise模式来处理异步数据
我想指出你犯的几个错误
$http.get
promise from service methodgetLocations
,这样您就可以将函数置于该方法之上李>
然后在控制器内部从控制器调用服务方法getLocations
,并放置。然后调用函数,其中第一个函数在ajax成功时调用,第二个函数在ajax错误时调用。
的功能。然后
this.getLocations = function () {
return $http.get(serverPath); //return promise object
};
控制器
testService.getLocations().then(function(response){ //success function
$scope.locations = response.data;
}, function(error){ //error function
console.log("Some error occurred", error)
});
下面是我是如何做到这一点的,因为$http中有承诺
我想在页面中添加一个初始化步骤
内部服务:
$http.get(serverPath)
.success(function(data) {
return data;
})
.error(function(err) {
console.log("some error occured");
return err;
});
控制器:
app.controller('LocationsController', function($scope, testService) {
$scope.init = function() {
testService.getLocations()
.success(function(res) {
$scope.locations = res;
})
.error(function(err) {
console.log("LocationsController, getLocations error:", err);
// alert(err);
});
};
});
标记:
<div ng-controller="LocationsController" ng-init="init()">
<ul>
<li ng-repeat="location in locations">
{{ location.locationName }}
</li>
</ul>
</div>
-
{{location.locationName}
如果http调用需要一些时间,还可以添加ng hide 您在哪里运行警报(数据)
?@gtlambert在我的位置控制器中。我删除了这一行。只有当服务实际返回承诺时,这一行才会起作用。不,.success()和.error()都返回额外链接的原始承诺。(你不应该再使用它们了,它们已经被弃用了。)@Dave我想你是在说,我在上面的回答中做了什么:我明白了<代码>$http.get('/someUrl',config.),然后(successCallback,errorCallback)代码>我就把它放在那里。@MortezaAghili很高兴听到这个消息。。谢谢:)我可以将此方法用于post或put方法吗?@MortezaAghili您所说的此
是什么意思?让我检查一下,如果是错误,我将为您解释。再次感谢