我无法通过一个变量里面的内容$http.get()
这个方法之外......它总是undefined
。
我测试$rootScope
,但没有奏效。
controller('myControl', function ($scope, $http) {
var content;
$http.get('../Json/data.json').success(function (data, content) {
content = data;
}).error(function (data, status, headers, config) {
$scope.dataJson = "ERROR";
});
console.log(content);
});
这里有两个问题:
- 该
content
在您的成功处理程序参数被遮蔽的content
在你的控制变量。 - 您正在尝试写
content
到控制台它有一个值之前。 这不会起作用,因为$http.get()
是异步的。
要解决这些问题:
- 删除
content
参数。 这也是没有用处的。 - 使用
content
变量里面你success
的回调。
controller('myControl', function ($scope, $http) {
var content;
$http.get('../Json/data.json').success(function (data) {
content = data;
console.log(content);
$scope.dataJson = content;
}).error(function (data, status, headers, config) {
$scope.dataJson = "ERROR";
});
});
首先,你不等待异步$http.get()
来完成这样console.log()
总是会打印出undefined
。
其次,也许你可以考虑使用then()
而不是success()
http://bit.ly/18xIHio
以下应该只是罚款你。
/* JS */
app.controller('myControl', function($http) {
var ctrl = this;
$http.get('http://www.data.fi/data.json').then(function (response) {
ctrl.content = response; // use response.data to get the payload
}).catch(function (error) {
ctrl.content = error;
}).finally(function() {
console.log(ctrl.content);
});
});
<!-- HTML -->
<div ng-controller="myControl as ctrl">{{ ctrl.content | json }}</div>
请不要在参数的成功传递函数内容。 这是一个全局变量。 传递将创建范围的问题。 还可以使用内外成功的功能和外面CONSOLE.LOG。