当我在控制器中调用工厂方法时,它很好 - 但是当我在控制器方法中调用工厂方法时,它是未定义的。
这是我的工厂:
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对我来说是新手,所以如果这是不好的做法,那么我很高兴被指向正确的方向。
由于
答案 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;
});
}