Могу ли я использовать функции службы Factory внутри службы factory?

Например, у нас есть эта фабричная служба, эта служба получит и установит имя пользователя.

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

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

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

        }
        }]);

Могу ли я использовать функцию getFirstname внутри этой службы?? Если я могу, то вы можете показать мне, как это сделать


person devadnqpnd    schedule 21.04.2015    source источник


Ответы (2)


Да, вы можете, если вы разобьете свой javascript на части. Вместо того, чтобы определять функцию внутри возвращаемого объекта, просто заранее назначьте ее переменной. Затем вы можете использовать функцию внутри фабрики. Просто не забудьте в конце присвоить функцию возвращаемому объекту.

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");
        }
    };
}]);
person ryanyuyu    schedule 21.04.2015

Я думаю, что есть лучший способ сохранить код службы организованным и чистым.

Кофейный скрипт:

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;
}]);
person Rax    schedule 21.04.2015