我可以在工厂服务中使用工厂服务功能吗?

Can I use Factory service functions inside the factory service?

例如我们有这个工厂服务,这个服务将获取并设置用户的名字。

app.factory('userService',['$rootScope',function($rootScope){
      var user = {};
      return {

          getFirstname : function () {
            return user.firstname;
          },

          setFirstname : function (firstname) {
            user.firstname = firstname;
            $rootScope.$broadcast("updates");
          }

        }
        }]);

我可以在此服务中使用 getFirstname 函数吗??如果我可以,那你能告诉我怎么做吗

是的,如果您将 javascript 分成几块,就可以。不要在 return 对象中定义函数,只需预先将其分配给一个变量即可。然后就可以使用工厂里面的函数了。请记住在最后将函数分配给您的 return 对象。

app.factory('userService', ['$rootScope', function ($rootScope) {
    var user = {};
    var getFirst = function() {
        return user.firstname;
    };
    //Do anything else with getFirst

    return {
        getFirstname: getFirst, //assign the function to the factory return obj

        setFirstname: function(firstname) {
            user.firstname = firstname;
            $rootScope.$broadcast("updates");
        }
    };
}]);

我认为有更好的方法来保持服​​务代码的组织和清洁。

咖啡脚本:

app.factory 'userService', [
  '$rootScope'
  ($rootScope) ->
    service = 
      user: null

      getFirstName: ->
        service.user.firstname

      getLastName: ->
        service.user.firstname

      setFirstName: (firstname) ->
        service.user.firstname = firstname
        $rootScope.$broadcast 'updates'
        return

      getDisplayName: ->
        service.getFirstName() + service.getLastName()
]

Javascript:

app.factory('userService', ['$rootScope', function($rootScope){
  var service = {
    user: null,

    getFirstName : function () {
      return service.user.firstname;
    },

    getLastName : function () {
      return service.user.firstname;
    },

    setFirstName : function (firstname) {
      service.user.firstname = firstname;
      $rootScope.$broadcast("updates");
    },

    getDisplayName: function() {
      return service.getFirstName() + service.getLastName();
    }
  }
  return service;
}]);