我正在尝试进行$ http调用并将返回的数据分配给变量。目前我有这个代码,它工作正常。
这是我的控制器内部:
.controller('sample', ['$scope', '$http', function($scope, $http){
var ctrl = this;
$http.get('somejson.json').success(function(data){
$scope.myData = data;
});
});
但是,我不想将其分配给$ scope,而是将其分配给我的控制器变量。但是在我的get函数中,ctrl总是未定义的。我在这里错过了什么吗?我尝试从角度阅读文档,但没有运气。谢谢!
这不起作用:
.controller('sample', ['$scope', '$http', function($scope, $http){
var ctrl = this;
$http.get('somejson.json').success(function(data){
debugger;// when I type ctrl in console, just to check, ctrl is undefined.
ctrl.myData = data; // ctrl is undefined. is it possible to do this?
});
});
答案 0 :(得分:0)
它完美地适用于这个小提琴。
app.controller('myController', ['$scope', '$http', function($scope, $http) {
var ctrl = this;
$http.get('https://dl.dropboxusercontent.com/u/94145612/example.json').success(function(data
ctrl.myData = data; // ctrl is undefined. is it possible to do this?
});
}]);
答案 1 :(得分:0)
不确定为什么它不起作用,但我几乎可以完全确定它是不是,因为ctrl
未定义。将this
分配给另一个变量应该可以正常工作:
var ctrl = this;
$http.get('somejson.json').success(function(data){
ctrl.myData = data;
});
另一种选择是使用.bind()
:
$http.get('somejson.json').success(function(data){
this.myData = data; // ctrl is undefined. is it possible to do this?
}.bind(this));
我更喜欢第一种方法。
答案 2 :(得分:0)
注意:控制台仅使变量可访问,这两者都是定义的 在全局或当前正在执行的功能范围内。
第一种情况
.controller('sample', ['$scope', '$http', function($scope, $http){
// since it is declared as var ctrl , here it gets function scope.
var ctrl = this;
$http.get('somejson.json').success(function(data){
debugger;
// when application is paused in debugger mode, it will be accessible for that instance
// once debugger mode is gone, console shifts current context, and doesn't make ctrl accessible
ctrl.myData = data;
});
});
第二个案例
.controller('sample', ['$scope', '$http', function($scope, $http){
// since there is no declaration as var ctrl , here it gets global scope.
ctrl = this;
$http.get('somejson.json').success(function(data){
debugger;
// ctrl will be accessible in console
ctrl.myData = data;
});
});