一種可能的方法可能是保留當前運行的應用程序的injector
(如angular.injector
文檔底部所述)。這是通過在當前正在運行的應用程序的元素上使用angular.element
來獲得其injector()
來完成的。
輕鬆獲得該元素的保留,如果你給上你聲明你的應用程序的mcfoggy-application-search
的ID標籤:
<div ng-app="mcfoggy.application.search" id="mcfoggy-application-search">...</div>
...你可以.getElementById()
和揍原(按照你的plunkr):
console.info('interpreting duckduckGoService.js');
var appElement = document.getElementById('mcfoggy-application-search');
var injector = angular.element(appElement).injector();
injector.invoke(['SearchService', '$log', function(SearchService, $log) {
// replace search in SearchService
SearchService.search = function(terms) {
var duckduckGoSearch = 'https://duckduckgo.com/?q=' + encodeURI(terms);
$log.info("search called: " + duckduckGoSearch);
// $window.location.href = duckduckGoSearch;
};
}]);
也許不如裝飾漂亮,但它似乎工作!
Updated plnkr
來源
2015-06-05 16:54:39
JcT
沒有任何其他的答案,我會給予你的賞金,但不會接受的答案,因爲它不使用裝飾。感謝您的時間和幫助。 –
謝謝,@MatthieuBROUILLARD--希望至少有一些幫助。我有興趣進一步調查這種方法與裝飾的可能性的比較(當我有更多時間時,我會嘗試這樣做);當你應用到你的簡化的實際代碼時,你是否能夠擴展你在上述方法中遇到的限制?樂於集思廣益進一步的解決方案。 – JcT