我正在开展一个角度项目,我正在为旧项目添加新功能 我正在尝试使用我的控制器注册服务,但是在我的控制器无法找到服务中的功能时出现错误。
以下是我的控制器的定义方式(我知道这不是标准方式,但我必须遵循这一点,因为整个应用程序都有。)
angular.module("test").controller("listCtrl", listCtrl);
listCtrl.$inject = ["$scope", "$state", "$timeout", "listService", "$rootScope"];
function listCtrl($scope, $state, $timeout, listService, $rootScope ) {
this.$scope= $scope;
$scope.service=listService;
//some other definitions
$scope.items = $scope.service.getPage(%function_ARGUMENTS%);
}
以下是服务的定义方式:
angular.module("test").service("listService", listService);
listService.$inject = ['$state', '$rootScope'];
function listService($state, $rootScope) {
function getPage(%function_ARGUMENTS%) {
//getPage function definition goes here
}
}
现在,出于某种原因,我收到错误:
无法读取未定义的属性'getPage'
我无法弄清楚可能导致这种情况的原因
问题$scope
是如何定义的?如果是,那么正确的方法是什么,假设this.$scope=$scope
无法修改。
编辑:修正了问题中的复数拼写错误。我的程序中没有那个拼写错误,这是我在输入SO时犯的错误。
答案 0 :(得分:1)
预计会出现错误,因为您已定义$scope.service
,其中使用$scope.services
注意其他" s"。所以使用正确的变量
$scope.items = $scope.service.getPage(%function_ARGUMENTS%);
但是,您将获得另一个错误,因为函数getPage
与返回服务对象相关联。
function listService($state, $rootScope) {
this.getPage = function() {
//getPage function definition goes here
}
}
OR,
function listService($state, $rootScope) {
function getPage () {
//getPage function definition goes here
}
this.getPage = getPage;
}
答案 1 :(得分:1)
angular.module("test").factory("listService", listService);
listService.$inject = ['$state', '$rootScope'];
function listService($state, $rootScope) {
return {
function getPage(%function_ARGUMENTS%) {
//getPage function definition goes here
}
}
}
只需在上面写上服务功能。
答案 2 :(得分:1)
我也注意到: $ scope.items = $ scope.services.getPage(%function_ARGUMENTS%);
应该是: $ scope.items = $ scope.service.getPage(%function_ARGUMENTS%);
当它应该是单数时,$ scope.service在该行上是多元化的。您也在使用服务服务,这是一个构造函数。因此,您需要使用this关键字引用您的属性。 angular服务方法使用new关键字在内部创建对象。你可以尝试一下工厂:
angular.module("test")
.factory("listService", listService);
listService.$inject = ['$state', '$rootScope'];
function listService($state, $rootScope) {
function getPage(%function_ARGUMENTS%) {
//getPage function definition goes here
}
return {
getPage: getPage
};
}
这与您所拥有的更相似,并且您不需要使用this
关键字,因为它不是构造函数。
希望这有帮助!
干杯