Подтвердить что ты не робот

Можно ли создать абстракцию компонента на Angular 2?

Я хочу создать AbstractComponent с начальным поведением, будучи в состоянии переопределить его на дочернем, когда это необходимо, возможно ли это? Это хорошая практика?

Должен выглядеть примерно так:

export abstract class AbstractComponent implements OnInit {

  constructor(authService: AuthService, router: Router) {}

  ngOnInit() {
    if (authService.userNotLoggedInAnymore()) {
      router.navigate(['Login']);
    }
  }

  ...
}
4b9b3361

Ответ 1

Да, просто расширьте этот класс с помощью реального @Component и вызовите super() в методах, которые вы переопределите, например ngOnInit. И вы также должны переопределить конструктор с, по крайней мере, теми же или более зависимостями в родительском объекте и передать их также с помощью super().

Ответ 2

В качестве альтернативы вы также можете обойтись без параметров конструктора в абстрактном классе вообще и объявить сервисы с помощью декоратора @Inject, тогда вам не нужно прикасаться к конструктору наследующего класса и вызывать супер (...) -method там:

import { Inject } from '@angular/core';

export abstract class AbstractComponent implements OnInit {

  @Inject(AuthService) private authService: AuthService;
  @Inject(Router) private router: Router;

  ngOnInit() {
    if (authService.userNotLoggedInAnymore()) {
      router.navigate(['Login']);
    }
  }
  ...
}