我有这个代码并且运行良好:
var app = angular.module("resources", []);
app.service("resourceService", function ($http) {
return {
GetAll: function (callBack) {
$http.get("api/Resource/Get").success(function (data) {
callBack(data);
})
}
}
});
app.controller("resourcesCtrl", function ($scope, resourceService) {
$scope.resourceList = [];
resourceService.GetAll(function (data) { $scope.resourceList = data; });
});
在早期版本的angularjs中使用“Controller as”语法,您可以将$scope
替换为this
。如果我这样做,我的控制器就像:
app.controller("resourcesCtrl", function (resourceService) {
this.resourceList = [];
this.setResourceList = function(data){
this.resourceList = data;
};
resourceService.GetAll(this.setResourceList);
});
我添加setResourceList
,将其称为控制器方法,以使用this
访问控制器上下文。
但现在,当setResourceList
方法作为回调函数运行时,this
为window
(因为我有函数调用,而不是方法调用),所以this.resourceList
是未定义。
我正在寻求解决问题的任何解决方案,我认为问题根目标是用$scope
替换this
。有没有办法在使用$scope
?
答案 0 :(得分:2)
使用闭包来捕获this
的值。
app.controller("resourcesCtrl", function (resourceService) {
var that = this;
this.resourceList = [];
this.setResourceList = function(data){
that.resourceList = data;
};
resourceService.GetAll(this.setResourceList);
});