Question Puis-je avoir plusieurs fonctions dans mon AngularJS Factory?


Je suis le Didacticiel des documents officiels AngularJS et je veux savoir si je peux ajouter une autre fonction à la fabrique de téléphones pour pouvoir mieux organiser le code. Ils ont déclaré une fonction "query", mais que faire si je voulais ajouter une fonction query2 qui référence une URL différente ... disons téléphones2 /: phoneName.json par exemple?

Déclaration d'usine:

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}
    });
  }]);

J'ai essayé un certain nombre de choses et aucune d'entre elles ne semble fonctionner: s

Ce répondre semble être sur la bonne voie, mais la syntaxe de chaque fonction d'usine ne correspond pas tout à fait à la fabrique ci-dessus.

Quelque chose du genre:

phonecatServices.factory('Phone', ['$resource',
      function($resource){
       return {
        query: ...
        query2: ...
       }
      }]);

17
2018-02-17 05:03


origine


Réponses:


Un exemple de ceci est: Lien pour la démo

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);
     };
}]);

Il existe même une version mieux adaptée de cette version: Les références

function AnotherService () {

  var AnotherService = {};

  AnotherService.someValue = '';

  AnotherService.someMethod = function () {

  };

  return AnotherService;
}
angular
  .module('app')
  .factory('AnotherService', AnotherService);

25
2018-04-06 08:51



C'est le code de service:

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 }}),
    };
  }
]);

Et à partir de mon contrôleur, je dois juste ajouter l'appel à la fonction go () pour le faire fonctionner:

Auth.Login.go({ username: $scope.username, password: $scope.password },

Je suppose que j'aurais pu nommer la fonction go après la méthode et l'appeler "post ()" à la place pour plus de clarté ...


14
2018-02-21 03:08