Angular 具有名称绑定的 UpgradeComponent

Angular UpgradeComponent with name binding

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

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

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

Typescript 阻止您访问 parent classes 上的私有属性。解决这个问题会破坏将变量设置为私有的目的。如果您将 child class 上的名称 属性 也更改为私有,则警告会更改为 'Types have separate declarations of property "name"'。他们正在阻止这种情况的发生,因为在编译代码中,您总是首先获得在 child class 上声明的属性 - 如果您在 child [=30= 中提供自己的值],您无法访问实例化基础 class.

时本应拥有的值

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

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

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