AngularJS:在Controller方法中未定义工厂

时间:2014-12-12 19:19:20

标签: javascript angularjs angularjs-controller angularjs-factory

当我在控制器中调用工厂方法时,它很好 - 但是当我在控制器方法中调用工厂方法时,它是未定义的。

这是我的工厂:

app.factory('config', ['$http', '$interval', function($http, $interval, $scope) {
    return {
        lines: function() {
            return $http({
                url: appPath+'/config.php?data=lines',
                method: 'JSON'
            })
        },
        updateLines: function() {
            $http.post(appPath+'/write.php?handler=update line', $scope.lines).
                success(function(data, status, headers, config) {
                    return true;
                }).error(function(data, status, headers, config) {
                    return false;
                });
        }
    }
}]);

我的控制器:

app.controller('lineController', function($scope, $interval, $http, config) {
    // this works fine
    config.lines().success(function(data) {
        $scope.lines=data;
    });

    this.addToLine = function(line, customer) {

    };

    this.unassign = function(customer, line) {
        var index = line.indexOf(customer);
        line.splice(index, 1);

        // Cannot read property 'lines' of undefined
        config.updateLines();
    };
});

在控制器范围内定义了我的工厂配置,但是在方法中引用配置时,工厂未定义。 AngularJs对我来说是新手,所以如果这是不好的做法,那么我很高兴被指向正确的方向。

由于

1 个答案:

答案 0 :(得分:3)

您收到的错误消息似乎是正确的。 $scope.lines在您的工厂中不存在,但在您的控制器中。所以你可能想要做的就是将值从控制器传递到工厂,如下所示

控制器中的功能

config.updateLines($scope.lines);
工厂中的

功能

updateLines: function(lines) {
    $http.post(appPath+'/write.php?handler=update line', lines).
        success(function(data, status, headers, config) {
            return true;
        }).error(function(data, status, headers, config) {
            return false;
        });
}