2015-01-02 121 views
1

我希望能夠在運行時期間執行自定義外部腳本,並讓他們訪問我的AngularJS自定義服務和工廠。AngularJS:將服務和工廠注入到非AngularJS函數中

加載的腳本不應該是控制器,因爲我沒有興趣將它們鏈接到任何視圖。

應該看起來像:

1)在運行時加載外部腳本

2)注入該函數自定義AngularJS服務和工廠,然後執行它。

是否有可能注入這種方式?

回答

5

要回答你問的問題 - 是的,你可以做這樣的事情。

您可以使用injector得到一個服務實例:

angular.injector(["Your.Service.Module"]).get("FooSvc"); 

請記住,如果你的服務有其他依賴,那麼你就需要指定所有的人。例如,如果你的服務需要$timeout

angular.module("fooModule", []).factory("FooSvc", function($timeout){ 
    ... 
} 

,那麼你就需要像這樣把它注射:

var fooSvcInstance = angular.injector(["fooModule", "ng"]).get("FooSvc"); 

另外,還要注意該服務的實例會比什麼將被注入不同到您的應用程序。

Plunker

爲什麼你需要做的這一點,你應該重新評估

編輯

要得到相同的服務實例作爲什麼應用程序讓你需要得到噴油器的同一個實例。要做到這一點,您需要在Angular的應用程序中反對來自DOM元素的injector。例如,讓我們說,<body>是在您的應用程序:

// make sure that body has loaded (for example, in window.onload) 
var injectorInstance = angular.element(document.body).injector(); 
var fooSvcInstance = injectorInstance.get("FooSvc"); 

+0

服務的實例必須是相同的,否則它忽略了一點對我來說。可能嗎? 我應該只使用與我的應用程序相同的模塊嗎? –

+0

對不起,對於延遲 - 是的,這是可能的 - 您需要從Angular的應用程序DOM樹中的元素中檢索注入器。我更新了答案。 –