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

时间:2015-04-21 14:06:02

标签: angularjs angular-services

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

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

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

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

        }
        }]);

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

2 个答案:

答案 0 :(得分:0)

是的,如果你将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");
        }
    };
}]);

答案 1 :(得分:0)

我认为有一种更好的方法可以保持服务代码的整洁和清洁。

CoffeeScript的:

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