我正在尝试使用httml get来获取json
我有类似
的东西.controller('testController', function($scope, $state, $http) {
$http({
url: "/json/test.json",
method: "GET",
}).success(function(data) {
$scope.testData = data;
console.log(data)
});
//outside of the $http scope but under the same controller, I have
//It shows undefined.
console.log($scope.testData)
})
我知道我们必须保留登录代码的数据,所以我不想修改$ http中的数据。反正有没有完成这个?谢谢!
答案 0 :(得分:1)
首先,不要把它放在控制器中。将其移至服务。这就是服务的目的。
其次,$ http服务是异步的。您的结果仅存在于成功回调中,并且您的console.log将在http请求完成之前被调用。您需要将其分配给范围变量以在回调之外使用它,并且在回调完成之前期望它为空。
http://blog.brunoscopelliti.com/deal-with-users-authentication-in-an-angularjs-web-app提供了AngularJS身份验证服务的示例,如果这正是您正在做的事情。
继续你的例子:
.controller('testController', function($scope, $state, $http) {
$scope.testData = {};
$http({
url: "/json/test.json",
method: "GET",
}).success(function(data) {
$scope.testData = data;
$scope.logData();
});
$scope.logData = function() {
console.log($scope.testData);
}
});
答案 1 :(得分:1)
创建此plnkr code是为了给出答案,是的,您可以在http请求之外使用$ scope.testData。
看看!!
var app = angular.module('plunker', []);
app.controller('testController', function($scope, $http) {
$http({
url: "test.json",
method: "GET",
}).success(function(data) {
$scope.testData = data;
alert(data);
callA();
});
function callA(){
alert($scope.testData);
}
});