: string ): ClassDecorator {
return function ( constructor : any ) {
const analyticsService = AppModule.injector.get(AnalyticsService);
const ngOnInit = constructor.prototype.ngOnInit;
constructor.prototype.ngOnInit = function ( ...args ) {
analyticsService.visit(pageName);
ngOnInit && ngOnInit.apply(this, args);
}
const ngOnDestroy = constructor.prototype.ngOnDestroy;
constructor.prototype.ngOnDestroy = function ( ...args ) {
analyticsService.leave(pageName);
ngOnDestroy && ngOnDestroy.apply(this, args);
}
}
}
ребят, нашел вот такой вот код, но он не рабочий, у AppModule нет метода injector
кто-нибудь знает, есть способы раелизовать подобный функционал ?
Декораторы должны быть чистыми, а значит ничего об Injector знать не должны. Сделать можно, но это все костыли. @Injectable({ providedIn: ‘root’ }) class InjectorProvider { static injector: Injector; constructor(injector: Injector) { InjectorProvider.injector = injector; } } export function PageTrack(pageName: string): ClassDecorator { return function (constructor: any) { const injector = InjectorProvider.injector; // … } }
Обсуждают сегодня