Могу ли я иметь несколько функций в моем AngularJS Factory?
Я следую Tutorial из официальных документов AngularJS, и я хочу знать, могу ли я добавить еще одну функцию на телефон factory, чтобы лучше упорядочить код. Они объявили функцию "запроса", но что, если бы я хотел добавить функцию query2, которая ссылается на другой URL... например, телефоны2/: phoneName.json?
Factory Объявление:
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
Этот ответ кажется на правильном пути, но синтаксис для каждой функции factory не совсем совпадает с приведенным выше factory.
Что-то по строкам:
phonecatServices.factory('Phone', ['$resource',
function($resource){
return {
query: ...
query2: ...
}
}]);
Ответы
Ответ 1
Один из таких примеров:
Ссылка для демонстрации
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);
};
}]);
Существует даже лучшая версия. Рекомендуемая версия: Ссылки
function AnotherService () {
var AnotherService = {};
AnotherService.someValue = '';
AnotherService.someMethod = function () {
};
return AnotherService;
}
angular
.module('app')
.factory('AnotherService', AnotherService);
Ответ 2
Это служебный код:
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()"...