问题 是否可以在Angular 2上创建组件抽象?


我想创建一个具有初始行为的AbstractComponent,同时能够在需要时覆盖它,可能吗?这是一个好习惯吗?

应该看起来或多或少是这样的:

export abstract class AbstractComponent implements OnInit {

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

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

  ...
}

5986
2018-01-12 19:33


起源

您是否遇到过这种方法的问题? - Günter Zöchbauer
我想知道如何指定Authservice和Router的提供程序,因为我不能使用@Component注释,主要是因为它没有模板..这让我想知道角度2是否设计为这个purpouse - Marcos J.C Kichel
我想你会指定这样的提供者 bootstrap() 无论如何,不​​是每个组件。如果你想要一个单身人士,你必须只传递它 bootstrap() 否则为每个组件创建一个新实例。 - Günter Zöchbauer
真的吗?这对我来说很新:O - Marcos J.C Kichel
只应列出实际需要每个组件的新实例的提供程序 @Component(providers: [])。 - Günter Zöchbauer


答案:


是的,只需用真实的类扩展该类 @Component 并打电话 super() 在你重写的方法中,如ngOnInit。而且您还必须覆盖父项中至少具有相同或更多依赖项的构造函数,并将其传递给它们 super() 太。


12
2018-01-12 19:35



模板怎么样,也可以用父抽象组件嵌套? - Robert Limanto
组件继承不包括模板和样式。 - nacho_dh
使用--aot构建Angular 4应用程序时出错:“ERROR in无法确定[file]中类[MyComponent]的模块!将[MyComponent]添加到NgModule中进行修复。”任何人都有解决方法吗? - Algis
和@Algis有同样的问题 - 有人最终找到了解决方法吗? - NotSimon