我最近使用AngularJS和ES6創建了一個新項目。這是我第一個ES6項目,我對它的進口報表非常滿意。以前,我必須使用AngularJS依賴注入來在我的應用程序邏輯中使用不同的服務。現在我可以使用ES6導入輕鬆導入不同的服務。問題是,我允許編寫非角度服務並使用import
導入它們,或者我必須以角度服務(或工廠)格式編寫它們,並使用依賴注入來導入?AngularJS依賴注入VS ES6導入
回答
首先,Angular dependency injection和ES6 import是兩個不同的概念。
角度依賴關係注入是一種提供組件的依賴關係,而不是在組件內對其進行硬編碼的方法。這可以減輕組件查找依賴關係的可能性並使依賴關係可配置。
ES6導入是一個JavaScript功能,用於導入由另一個模塊導出的綁定。
您可以導入一個模塊,該模塊可以是您的服務級別並將其添加爲角度服務。如果您正在編寫「無角度」服務,請確保它是可導出的ES6類。您不能直接使用ES6類作爲依賴項,因爲角度需要在DI之前對其進行角度化。
my-service.service.js
export default class MyService {
constructor() {
this.items = [''];
}
getItem() {
return this.items;
}
}
MyService.$inject = ['SomeOtherService'];
在index.js
import angular from 'angular';
import MyService from './my-service.service';
angular.module('myApp')
.service('MyService', MyService);
這是ES6可以用AngularJS依賴注入工作的一種方式。
就個人而言,我終於已經開始只使用DI注入像$ HTTP和單應用程序(業務邏輯)的服務,這是一些內部服務。
如果我需要類,我想要自己實例化(new Something(...)),那麼我使用es6模塊導入語法和純es6類。在我的應用程序中,這些類型是多數。
就是這樣,完美的作品。我必須說我已經到了這個工作流程,因爲IDE自動完成無法在DI方法中正常工作,並且它開始讓我非常煩惱。現在我享受絕對真棒,正確和超快速的自動完成。
Angularjs的依賴關係(特別是工廠)是es6-imports之前的生命保護者,因爲它爲你隔離了命名空間。現在es6模塊執行此操作。 儘管如此,您仍然可以從DI獲益,因爲它只是使用Angular內部服務(例如$ http)的便捷方式,並且它是實例化單例類(使用.service(...))的便捷方式。
UPD。如果你想在你的類使用angularjs依賴外angularjs,你可以使用這個:
$http = injector('$http')
噴油器功能來自這裏:
// injector.js
let cache = {}
/**
* Use example:
* import injector from 'injector.js'
* $http = injector('$http')
*
* @param dependency {string}
*/
export function injector (dependency) {
return cache.hasOwnProperty(dependency)
? cache[dependency]
: cache[dependency] = angular.element(document).injector().get(dependency)
}
重要!只有在文檔準備就緒後,注入器()函數才能運行。通常情況就是這樣,但是如果沒有,你將在注入器(injector.js)中出現錯誤「Can not read property'get'undefined」。解決方案簡單地在文檔準備好後進行注入:
import { injector } from '../injector.js'
let $http;
angular.element(document).ready(() => {
$http = injector('$http')
})
export const myHttp = {get: (...) => $http.get(...), post: ...}
- 1. AngularJS依賴注入 - 隱VS陣註釋
- 2. AngularJS簡單依賴注入
- 3. AngularJS動態依賴注入
- 4. AngularJs依賴注入差異
- 5. Laravel:依賴注入vs Facades?
- 6. Angular2依賴注入vs @ViewChild
- 7. 依賴注入
- 8. 依賴注入
- 9. 依賴注入
- 10. 依賴注入
- 11. 依賴注入
- 12. 依賴注入
- 13. 使用依賴注入來注入依賴注入器
- 14. 使用HTML導入的依賴注入
- 15. angularjs 1.5組件依賴注入
- 16. AngularJs + typescript指令依賴注入
- 17. AngularJS依賴注入 - 混淆語法
- 18. Angularjs依賴注入不起作用
- 19. AngularJS依賴注入時序問題
- 20. AngularJS:添加依賴關係(內聯陣列vs注入)
- 21. 依賴注入:手工VS autofac
- 22. 策略模式vs依賴注入
- 23. OSGi中的依賴注入vs測試
- 24. Typescript依賴注入公有vs私有
- 25. AngularJS依賴注入$注入器:modulerr錯誤
- 26. 依賴注入@protocol?
- 27. 依賴注入`trait`
- 28. 依賴注入akka.net
- 29. 依賴注入UserControl
- 30. Wicket依賴注入
依賴注入和導入甚至沒有遠程相關。你將使用兩者。 – zeroflagL
是的,我同時使用。但我的問題是關於在控制器中需要一項服務。我可以編寫角度服務並將其注入到控制器中,或者我可以編寫一個普通的JS類或函數並將其導入到控制器中使用。我問是否在AngularJS中使用導入而不是AngularJS DI反模式。 @zeroflagL – Najafsen
我認爲這是一個完全有效的問題。我也在尋找這個答案。 – Brendan