首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我的AngularJS工厂中可以有多个功能吗?

我的AngularJS工厂中可以有多个功能吗?
EN

Stack Overflow用户
提问于 2014-02-17 13:03:26
回答 3查看 23.8K关注 0票数 18

我正在遵循官方AngularJS文档中的Tutorial,我想知道是否可以向Phone工厂添加另一个函数,以便更好地组织代码。他们声明了一个“查询”函数,但是如果我想添加一个引用不同url...say 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}
    });
  }]);

我尝试了许多方法,但似乎都不起作用:

这个answer看起来是正确的,但是每个工厂函数的语法与上面的工厂并不完全匹配。

大致是这样的:

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

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-06 16:51:36

一个这样的例子是: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);
     };
}]);

甚至还有一个更好的版本:References

function AnotherService () {

  var AnotherService = {};

  AnotherService.someValue = '';

  AnotherService.someMethod = function () {

  };

  return AnotherService;
}
angular
  .module('app')
  .factory('AnotherService', AnotherService);
票数 26
EN

Stack Overflow用户

发布于 2014-02-21 11:08:49

这是服务代码:

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()“。

票数 14
EN

Stack Overflow用户

发布于 2021-04-29 19:18:57

是的,当然,你可以在一个对象中有多个函数。唯一需要注意的是你的服务应该返回一个对象。只要遵循object的语法,就可以在该对象中包含所有有效的javascript成员。

所以下面的内容是可能的

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

必须缺少用于分隔对象键值的comma (,)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21821150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档