干掉Angular2 TypeScript类

时间:2017-02-07 19:11:28

标签: angular typescript

我对TypeScript比较陌生。我需要实现两个共享一个共同功能和状态的路径保护。

当我尝试使用构造函数扩展可注入类时,生成的类不会接收私有成员的实例。

受挫的例子:

// guard-base.ts

@Injectable()
export abstract class GuardBase {
  constructor(
    private sharedState: SharedState,
  ) {}

  sharedMethod(): boolean {. . .}
}


// authentication-required.guard.ts

@Injectable()
export class RouteGuard extends GuardBase implements CanActivate {
  canActivate(): Promise<boolean> {
    console.log(this);
    // this.sharedState equals undefined at this point
  }
}

我是否必须在RouteGuard类中提供构造函数参数?我想要做的是封装基类上的所有导入和共享方法。那可能吗?如果没有,那么实现我想做的最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

即使是其他语言也希望您为新类提供一个新的构造函数(包含参数),然后将这些参数传递给父类的构造函数以执行您要求的操作。 http://www.c-sharpcorner.com/UploadFile/5089e0/how-to-use-super-keyword-in-typescript/

使用super(sharedState)sharedState参数从子项传递到父级构造函数。

如果要从父类访问成员变量,请使用protected而不是private