我试图使用Angular从远程WS获取Json格式的数据,并且我遇到了一些麻烦。 数据来自Web服务正确,但我不能在控制器内使用它。 这是为什么? 角度代码:
var booksJson;
var app = angular.module('booksInventoryApp',[]);
// get data from the WS
app.run(function ($http) {
$http.get("https://SOME_API_PATH").success(function (data) {
booksJson = data;
console.log(data); //Working
});
});
app.controller('booksCtrl', function ($scope) {
$scope.data = booksJson;
console.log($scope.data); //NOT WORKING
});
HTML:
<section ng-controller="booksCtrl">
<h2 ng-repeat="book in data">{{book.name}}</h2>
</section>
答案 0 :(得分:15)
您应该将$ http.get放在控制器中。
此外,Web服务返回的对象不是数组。所以你的ng-repeat应该是这样的:book in data.books
这是一个有效的例子:
var app = angular.module('booksInventoryApp', []);
app.controller('booksCtrl', function($scope, $http) {
$http.get("https://whispering-woodland-9020.herokuapp.com/getAllBooks")
.then(function(response) {
$scope.data = response.data;
});
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<article ng-app="booksInventoryApp">
<section ng-controller="booksCtrl">
<h2 ng-repeat="book in data.books">{{book.name}}</h2>
</section>
</article>
答案 1 :(得分:0)
创建bookJSON
作为数组,并推送元素而不是赋值。所以
var bookJSON=[];
在$http.get
内进行
data.forEach(function(item) { bookJSON.push(item); });
第二个控制台日志将显示未定义,因为该调用是异步的。作业将在未来发生。
run
方法无法保证代码在控制器加载之前运行。
还有其他方法可以解决这个问题。
避免全局变量。查看$routeProvider
resolve
属性。
或实施服务以获取此数据作为承诺。
答案 2 :(得分:0)
您可以在控制器内使用$ http服务,而不是使用运行块,然后像往常一样将数据附加到范围。只需记住将$ http服务注入您的控制器。
app.controller('booksCtrl', function ($scope, $http) {
$http.get("https://whispering-woodland-9020.herokuapp.com/getAllBooks").success(function (data) {
$scope.booksJson = data;
});
});
答案 3 :(得分:0)
<!DOCTYPE html>
<html>
<head>
<title>test your webservice</title>
</head>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<article ng-app="booksInventoryApp">
<section ng-controller="booksCtrl">
</section>
</article>
<script type="text/javascript">
var app = angular.module('booksInventoryApp', []);
app.controller('booksCtrl', function($scope, $http) {
//ResponseInvocationAgentRequestDTO
var jsonObject = {
"id":65,
"idUserSender": 5}
console.log("aaaaaaaaaaaaaaaaaaaa");
$http({
method: 'put',
url: 'yout URI' ,
data: jsonObject
})
.success(function(data,status){
console.log('all is good', data);
})
.error(function(data,status){
console.log('Erreur into url '+data);
});
});
</script>
</body>
</html>