如何在Angular 2中将Injected服务从超类继承到子类组件

时间:2017-01-23 23:52:06

标签: angular inheritance typescript dependency-injection

从Angular v2.0开始,inheritance is supported between components

给定父类,通过依赖注入向提供者提供服务,是否可以定义一个子类,扩展(或继承)其父类,以便它可以访问父母的服务

import {MyService} from './my.service'
import {OnInit} from '@angular/core'

@Component({
   selector: 'parent-selector',
   providers: [MyService],
   templateUrl: 'my_template.html'
})
export class ParentClass implements OnInit{
    public foobar: number;
    constructor(protected _my_service: MyService){};

    ngOnInit(){
        foobar = 101;
    }
}

@Component({
   selector: 'child-selector',
   templateUrl: 'my_template.html'
})
export class ChildClass extends ParentClass{
    public new_child_function(){
        // This prints successfully
        console.log(this.foobar);
        // This throws an error saying my_service is "undefined"
        this._my_service.service_function();
    }
}

当我们尝试从子级别调用new_child_function()时,它会成功访问其父级成员 foobar ,但是对this._my_service.service_function()的调用会为我们提供以下内容不那么有趣的错误:

Cannot read property 'get' of undefined

在这种特定情况下,孩子可以使用父母注入的服务 。我在想:

  1. 这是Angular2的组件继承支持的当前已知限制吗?
  2. 此代码示例是否缺少/错误?
  3. 这是Angular2对组件继承支持的错误吗?

1 个答案:

答案 0 :(得分:1)

将其设为http://www.sample.com/receiveUserDataAPI/receiver?&access_token=3658213e-5bb0-4c4b-89ca-f0f82513fc22public,即

protected
  

如果您不在构造函数constructor(protected _my_service: MyService){}; protectedprivate中使用,例如DI,则变量public的范围是_my_service您无法使用其他功能。

您可以阅读有关Parameter properties以及如何声明和访问它们的更多信息。

  

通过在构造函数参数前加上辅助功能修饰符constructor { }或两者来声明参数属性。