如何在Angularjs $ http.get()中回调控制器的方法.success()

时间:2014-01-01 08:52:54

标签: angularjs

我有这个代码并且运行良好:

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方法作为回调函数运行时,thiswindow(因为我有函数调用,而不是方法调用),所以this.resourceList是未定义。 我正在寻求解决问题的任何解决方案,我认为问题根目标是用$scope替换this。有没有办法在使用$scope

定义控制器的属性时访问控制器的属性

1 个答案:

答案 0 :(得分:2)

使用闭包来捕获this的值。

app.controller("resourcesCtrl", function (resourceService) {
    var that = this;
    this.resourceList = [];
    this.setResourceList = function(data){
        that.resourceList = data;
    };
    resourceService.GetAll(this.setResourceList);
});