我正在关注官方AngularJS文档中的Tutorial,我想知道是否可以向Phone工厂添加其他功能,以便我可以更好地组织代码。他们已经声明了一个“查询”函数,但是如果我想添加一个引用不同url的query2函数...比如说phone2 /:phoneName.json呢?
工厂声明:
var phonecatServices = angular.module('phonecatServices', ['ngResource']);
phonecatServices.factory('Phone', ['$resource',
function($resource){
return $resource('phones/:phoneId.json', {}, {
query: {method:'GET', params:{phoneId:'phones'}, isArray:true}
});
}]);
我已经尝试了很多东西,其中没有一些似乎正在起作用:s
这answer似乎在正确的轨道上,但每个工厂功能的语法与上述工厂不完全匹配。
有些事情:
phonecatServices.factory('Phone', ['$resource',
function($resource){
return {
query: ...
query2: ...
}
}]);
答案 0 :(得分:25)
其中一个例子是: Link for Demo
angular.module('services', []).factory('factoryName', ["$filter",
function($filter) {
var method1Logic = function(args) {
//code
};
var method2Logic = function(args) {
//code
};
return {
method1: method1Logic,
method2: method1Logic
};
}
]).controller('MainController', ["$scope", "$rootScope", "$filter", "factoryName", function ($scope, $rootScope, $filter,factoryName) {
$scope.testMethod1 = function(arg){
$scope.val1 = factoryName.method1(arg);
};
$scope.testMethod2 = function(arg){
$scope.val2 = factoryName.method2(arg);
};
}]);
甚至有一个更好的版本Opinionated版本:References
function AnotherService () {
var AnotherService = {};
AnotherService.someValue = '';
AnotherService.someMethod = function () {
};
return AnotherService;
}
angular
.module('app')
.factory('AnotherService', AnotherService);
答案 1 :(得分:14)
这是服务代码:
myServices.factory('Auth', ['$resource',
function($resource){
return {
Login: $resource(serviceURL + 'login', {}, { go: { method:'POST', isArray: false }}),
Logout: $resource(serviceURL + 'logout', {}, { go: { method:'POST', isArray: false }}),
Register: $resource(serviceURL + 'register', {}, { go: { method:'POST', isArray: false }}),
};
}
]);
从我的控制器中我只需要添加go()函数调用以使其工作:
Auth.Login.go({ username: $scope.username, password: $scope.password },
我想我可以在方法之后命名go函数并将其称为“post()”而不是为了清晰...
答案 2 :(得分:0)
是的,当然,您可以在一个对象中拥有多个功能。唯一需要注意的是您的服务应该返回一个对象。只要您遵循 object
的语法,您就可以在该对象中拥有所有有效的 javascript 成员。
所以以下是可能的
phonecatServices.factory('Phone', ['$resource',
function($resource){
return {
query: ... , // NOTICE THE COMMA HERE
query2: ...
}
}]);
您必须缺少用于分隔对象键值的 comma (,)
。