一位同事聲稱,這是將純ES6 JavaScript類注入Angular的不正確方法。我很好奇,如果有更好的方法(更正確)?順便說一下,將注入的依賴關係(本例中爲$timeout
)附加到實例上會更好嗎?爲什麼它更好?例如,構造函數中的this._$timeout = $timeout
。我個人認爲在這種情況下做這件事沒有任何好處。在ES6中將純類注入到角度1.x應用程序中的正確方法
class.factory.js
let ClassFactory = function($timeout) {
// Factory function that simply returns class constructor.
class MyClass {
constructor(a, b) {
// contrived class
this.a = a;
this.b = b;
this.c = null;
}
applyChange() {
// contrived class method
const SELF = this;
$timeout(() => {
SELF.c = SELF.a + SELF.b;
});
}
}
return MyClass ;
};
ClassFactory.$inject = ['$timeout'];
export default ClassFactory;
app.module.js
import ClassFactory from './factories/class.factory';
import AppService from './services/app.service';
export default angular.module('myApp', [])
.factory('ClassFactory', ClassFactory)
.service('AppService', AppService);
後來,在其他地方,我們可以使用類的一些服務或控制器,構建新MyClass的實例。
app.service.js
class AppService {
// contrived usage of our dependency injected pure class.
constructor(ClassFactory) {
this.array = [];
this._ClassFactory = ClassFactory;
}
initialize(a, b) {
// We can instantiate as many "MyClass" objects as we need.
let myClass = new this._ClassFactory(a, b);
this.array.push(myClass);
}
static serviceFactory(...injected) {
AppService.instance = new AppService(...injected);
return AppService.instance;
}
}
AppService.serviceFactory.$inject = ['ClassFactory'];
export default AppService.serviceFactory;
像AppService.instance = new AppService這樣的事情也不可取。它可能會正常工作,因爲只有1個應用程序實例,而服務是單例。但是它會在測試過程中導致內存泄漏。 – estus