2016-07-25 98 views
0

說我有一個crudService.js文件:如何注入模塊的2個不同的實例中AngularJs

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

但後來我發現當試圖使用服務變量時,它的屬性被設置爲'a'。我究竟做錯了什麼?

+0

真不明白你正在嘗試做的或者正在 – charlietfl

+0

正如其他人所說,這些服務是什麼樣的期望單身設計,並且通過採用這種模式,它可以在模塊中實現強大的通信方法。例如,您可以將服務注入到一個控制器中,訂閱事件,存儲數據或更改服務和其他控制器上的變量,以便訪問該數據或觸發事件。在Angular 2中,這是您的組件之間進行通信的手段,因爲範圍已經消失。我相信無論你需要做什麼,仍然可以用單身完成,你只需要重新思考你的方法。 – Zach

回答

1

角服務are singletons這是在第一次注射緩存:

所有服務角是單身。這意味着注射器至多使用每個配方一次來創建對象。噴油器然後緩存所有未來需求的參考。

genericCrudService是指相同的服務,在具有兩個變量genericCrudService服務,service === actionService實例注入它作爲serviceactionService變量的結果。

如果某個服務應只在某些情況下,得到一個新的實例,服務實例可以得到一個方法,它返回對象的新實例(例如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; 
相關問題