首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖子ngOnInit方法

覆盖子ngOnInit方法
EN

Stack Overflow用户
提问于 2018-10-02 17:57:25
回答 1查看 5.5K关注 0票数 2

我想从父类向子ngOnInit方法添加代码。我能做点类似的事吗?

代码语言:javascript
复制
export class Child extends Parent {
   constructor(){
      super(this.ngOnInit);
   }
   ngOnInit(){
      console.log('Child onInit');
   }
}

和家长:

代码语言:javascript
复制
export class Parent {
   constructor(childOnInitMethod: any){}
   ngOnInit(){
      console.log('Parent added code to child onInit');
      this.childOnInitMethod.apply(this, arguments)
   }
}

问题是,在子构造函数上,我没有"this“可用。

更新:在这里找到当前代码

现在,这就是我所做的。子类扩展父类的ngOnInit和ngOnDestroy。我希望实现的是避免调用父级“super.subscribeEvents()”,如下所示:

代码语言:javascript
复制
ngOnInit() {
   window.onresize = () => console.log('resizing');
   super.subscribeEvents();
}

我想要做的是从父级向子ngOnInit添加代码。这些课程包括:

代码语言:javascript
复制
export class DatatablePage extends EventSubscriber {
   @Output() onLoadRow: EventEmitter<any> = new EventEmitter();
   public gridApi: GridApi;
   constructor(
    events: Events
   ) {
    super(events, [
        { eventName: 'datatable:updateList', callbackFunction: () => this.onLoadRow.emit() },
        { eventName: 'datatable:resizeTable', callbackFunction: () => this.gridApi.sizeColumnsToFit() }
    ])
   }

   ngOnInit() {
       window.onresize = () => console.log('resizing');
       super.subscribeEvents();
   }
}

和家长:

代码语言:javascript
复制
export class EventSubscriber {


constructor(
    private events: Events,
    public eventSubscriptions: EventObject[]
) {
}

ngOnInit() {
    this.subscribeEvents();
}

ngOnDestroy() {
    this.unsubscribeEvents();
}

subscribeEvents() {
    this.eventSubscriptions.forEach((eventSubscription: EventObject) => {
        this.events.subscribe((eventSubscription.eventName), eventSubscription.callbackFunction)
    });
}

unsubscribeEvents() {
    this.eventSubscriptions.forEach((eventSubscription: EventObject) => {
        this.events.unsubscribe((eventSubscription.eventName), eventSubscription.callbackFunction)
    });
}
}
EN

回答 1

Stack Overflow用户

发布于 2018-10-02 18:14:14

下面的解决方案应该有效。

代码语言:javascript
复制
class Parent {
   constructor(){}
   ngOnInit(){
      console.log('Parent added code to child onInit');
      this.ngOnInit()
   }
}

class Child extends Parent {
    ngOnInit() {
      console.log('Child onInit');
    }
    invokeSuperOnInit() { 
        super.ngOnInit();
    }
}

const a = new Child();
a.invokeSuperOnInit();

处决:

  1. 创建子类的对象并分配给。
  2. 在对象a上调用invokeSuperOnInit方法。
  3. 调用父级的ngOnInit。
  4. 在父NgOninit中,我们调用了孩子的ngOnInit。调用子ngOnInit是因为“此”在整个层次结构中始终保持不变。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52613843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档