问题
我正在尝试在我的 Controller 中使用服务的自定义操作,但该功能未定义。
我有这个工厂:
var apiUrl = 'http://localhost:9232/api/';
var managerControllers = angular.module('managerControllers', ['ngResource', 'ngRoute']);
managerControllers.factory('businessService', ['$resource', function($resource) {
return $resource(apiUrl+'Business/:bussinessId',
{businessId: '@id'},
{
getSimple: {method:'GET', url: apiUrl+'Business/simple', isArray: true}
});
}]);
还有我的 Controller :
managerControllers.controller('ProfessionalController', ['$scope', '$routeParams', '$resource', 'professionalService', 'businessService',
function($scope, $routeParams, $resource, professionalService, businessService) {
$scope.params = $routeParams;
if($routeParams.id)
$scope.professionals = professionalService.query({businessId: $routeParams.id});
$scope.newProfessional = new professionalService();
$scope.businessOptions = businessService.getSimple();
this.addProfessional = function(professional){
professional.$save();
$scope.newProfessional = new professionalService();
};
}])
businessServce.getSimple() 未定义。
在原始 Controller 的代码中,我没有将 $resource 作为依赖项传递。目标是仅使用该服务。 $resource 只是为了能够调试。一旦 getSimple 出现在 businessService 上,我将删除它
我试过...
...在调用上设置断点,getSimple() 函数不会出现。它确实是未定义的,虽然我不知道为什么。
然后在 chrome 的控制台上,我使用工厂内部的相同代码创建了一个新的 $resource,并且 getSimple 显示正常。
问题
我还需要做些什么来公开我使用 $resource 在 businessService 上声明的 getSimple 吗?
感谢您的帮助!
最佳答案
您的资源定义没问题 - 如果我单独使用它,businessService.getSimple 是一个函数(参见 http://jsbin.com/cafupu/1/edit?js,console,output)
在您的示例中使用了内联注释代码
['serviceA', function(serviceA){}]
有没有可能你只删除了一个注释,但没有删除函数参数?
同步注解定义和函数参数是常见问题,所以我更喜欢写简单的函数(在jsbin中使用)和https://github.com/olov/ng-annotate用于缩小前的自动注释。
关于javascript - Angular $resource 自定义操作未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28802157/