具有名称绑定的Angular UpgradeComponent

时间:2018-05-16 19:20:17

标签: angular-components angular-upgrade

我使用UpgradeComponent在Angular 5中使用AngularJS组件.AngularJS组件有一个名为" name"它与UpgradeComponent上的私有变量冲突。

The name attribute conflicts with a private variable on UpgradeComponent

有一个简单的方法吗?

1 个答案:

答案 0 :(得分:2)

不幸的是,看起来没有一个简单的解决方案。

Typescript阻止您访问父类的私有属性。绕过它会破坏将变量设置为私有的目的。如果将子类的name属性更改为private,则警告将更改为“Types具有单独的属性声明”name“'。他们阻止了这种情况的发生,因为在编译的代码中,你总是首先得到在子类上声明的属性 - 如果你在子类中提供自己的值,你就无法获得你曾经拥有的值。你实例化了基类。

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

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

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