2015-10-15 70 views
1

當需要根據環境使用不同的服務/工廠實現時,AngularJS中的最佳實踐是什麼。Angular IoC最佳實踐

比方說,我有一個服務MessageService,它正在注入一些其他服務,但基於設備/平臺,它應該使用WebServiceMobileService

這就是我現在做的事:

angular 
    .module('message') 
    .service('MessageService', messageService); 

    var service = 'WebService'; 
    if (mobileDevice) { 
    service = 'MobileService'; 
    } 

    messageService.$inject = [service]; 

    function messageService(service) { 
    service.call(); // use the shared interface for both services inside this service 
    } 

是否有更好 - 更優雅 - 的方式做到這一點?

回答

1

您可以使用該模塊的「配置」塊爲此使用了「供應商」喜歡這裏 -

angular.module('app').config(['$provide', '$injector', 'mobileDevice', 
 
    function($provide, $injector, mobileDevice) { 
 
    $provide.value('MessageService', (mobileDevice) ? $injector.get('MobileService') : $injector.get('WebService')); 
 
    } 
 
]);

這是假設「移動設備」是一個角度不變。

現在你可以注入'MessageService'來做你想做的事。