3

我正在使用 UpgradeComponent 在 Angular 5 中使用 AngularJS 组件。AngularJS 组件有一个名为“name”的绑定,它与 UpgradeComponent 上的私有变量冲突。

name 属性与 UpgradeComponent 上的私有变量冲突

有没有简单的方法解决这个问题?

4

1 回答 1

3

不幸的是,似乎没有一个简单的解决方案。

Typescript 阻止您访问父类的私有属性。解决这个问题会破坏将变量设置为私有的目的。如果您将子类的名称属性也更改为私有,则警告将更改为“类型具有属性“名称”的单独声明”。他们正在阻止这种情况发生,因为在编译的代码中,您总是首先获得在子类上声明的属性 - 如果您在子类中提供自己的值,您将无法访问如果您将拥有的值您实例化了基类。

在这种特殊情况下,UpgradeComponent 使用 'name' 属性来存储您传递给构造函数中的 super() 调用的选择器名称。事后用您自己的本地属性覆盖它可能会导致不良行为。因此,为了防止这种情况,Angular 团队将该变量标记为私有,因此您无法覆盖它。

这是一个 Typescript Playground,用于查看编译代码中实际发生的情况:Playground

在这种情况下,我认为您最好的选择是在 Angular 1.x 组件上创建一个新属性,您可以将其用作您无法覆盖的 name 属性的别名。

于 2018-05-17T21:48:02.257 回答