如何在AngularJs

时间:2016-07-25 16:59:09

标签: javascript angularjs

说我有一个crudService.js文件:

crudService.module('genericCrudService', ['$http', '$log', 'config',  function ($http, $log, config) {
        ....
        return {
            setSomeAttribute: function(m) {
                // set attribute
            }
        }
    }]);

然后我有一个模块需要不同配置的crud服务实例:

module.factory('Task', ['genericCrudService','genericCrudService', function (service, actionService) {
        ...
        return {
           init: function(p) {
               service.setSomeAttribute('a');
               actionService.setSomeAttribute('b');
           }
        }
    }]);

但后来我注意到在尝试使用 service 变量时,其属性设置为' a'。我做错了什么?

2 个答案:

答案 0 :(得分:1)

第一次注入时缓存的角度服务are singletons

  

Angular的所有服务都是单身人士。这意味着进样器最多使用一次配方来创建对象。然后,注射器会缓存该参考,以满足未来的所有需求。

genericCrudService引用相同的服务,将其注入serviceactionService个变量会导致两个变量genericCrudService中都有service === actionService个服务实例

如果某个服务仅在某些情况下应该获取新实例,则服务实例可能会获得一个返回该对象的新实例的方法(例如factorygetInstance):

  app.factory('service', () => {
    function Service() {
      this.method = ...;
      this.factory = () => new Service;
    }

    return new Service;
  });

  ...
  var serviceInstance = service.factory();

如果服务应该到处都有新实例,它应该返回一个将手动实例化的工厂或构造函数:

  app.factory('Service', () => function () {
    this.method = ...;       
  });

  ...
  var serviceInstance = new Service;

答案 1 :(得分:0)

你不能这样做,因为角度服务是一个单身人士...看看那个帖子它解释得很好;)Are Angularjs services singleton?

您还可以查看AngularJS: Service vs provider vs factory。也许你会找到一种方法来做你想做的事情;)