我使用UpgradeComponent在Angular 5中使用AngularJS组件.AngularJS组件有一个名为" name"它与UpgradeComponent上的私有变量冲突。
有一个简单的方法吗?
答案 0 :(得分:2)
不幸的是,看起来没有一个简单的解决方案。
Typescript阻止您访问父类的私有属性。绕过它会破坏将变量设置为私有的目的。如果将子类的name属性更改为private,则警告将更改为“Types具有单独的属性声明”name“'。他们阻止了这种情况的发生,因为在编译的代码中,你总是首先得到在子类上声明的属性 - 如果你在子类中提供自己的值,你就无法获得你曾经拥有的值。你实例化了基类。
在这种特殊情况下,UpgradeComponent使用'name'属性来存储您传递给构造函数中的super()调用的选择器名称。事后可能会使用您自己的本地属性覆盖它可能会导致不必要的行为。因此,为了防止这种情况,Angular团队将该变量标记为私有,因此您无法覆盖它。
这是一个Typescript Playground,用于查看编译代码中实际发生的情况:Playground
在这种情况下,我认为最好的办法是在Angular 1.x组件上创建一个新属性,您可以将其用作无法覆盖的name属性的别名。