繁体   English   中英

从抽象 Class 与抽象组件继承 angular 组件有什么区别?

[英]What's the difference between inheriting an angular component from an Abstract Class versus an Abstract Component?

我正在尝试重用在各种视图组件中使用的某些业务逻辑和属性。 我创建了一个具有所需属性和函数的抽象 class 并在我的组件中继承了它。 效果很好。 我还创建了一个带有空模板的抽象组件,然后将我的业务逻辑移到了这里。 继承这个抽象组件也没有任何问题吗? 哪种方法是正确的?

方法一:

export abstract class GridViewBase implements IFilterView {
// Bla bla
}

然后在我的组件中:

@Component({
  selector: 'order-view',
  templateUrl: './order-view.component.html',
  styleUrls: ['./order-view.component.css']
})
export class OrderViewComponent extends GridViewBase implements AfterContentChecked, OnInit {
 }

方法二:

抽象组件:

@Component({
    template: ''
})
export abstract class BaseComponent {

查看组件:

    @Component({
      selector: 'order-view',
      templateUrl: './order-view.component.html',
      styleUrls: ['./order-view.component.css']
    })
    export class OrderViewComponent extends BaseComponent implements AfterContentChecked, OnInit {
}

两者都有效? 哪个是对的?

使用其中任何一个都有完全正当的理由。

在以下情况下,我会使用抽象组件或组件 inheritance:

  1. 我有相同的组件逻辑(相同的模型、数据和行为)但不同的视图(模板交换)。
  2. 我不想使用 super 关键字在基础 class 上注入依赖项,因为 angular 将处理注入
  3. 我的基础 class 包含 angular 注释,例如 @Input 或 @Output,这表明基础 class 将始终需要组件视图才能正常工作。
  4. 我需要编写将在任何 angular 组件生命周期挂钩期间执行的通用代码,例如 ngAfterContentChecked() 或 ngOnDestroy()。 继承这个基本抽象组件的组件不必担心在其内部单独处理这些钩子。

在以下情况下,我会使用 Abstract 或 class 继承:

  1. 我想使用相同的 class 作为非组件类和组件的基础。
  2. 根本没有组件逻辑(没有 html 模板依赖或任何其他依赖),只需要一些通用(如参数)和 T 类型的函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM