Угловой UpgradeComponent с привязкой имени - PullRequest
0 голосов
/ 16 мая 2018

Я использую UpgradeComponent для использования компонента AngularJS в Angular 5. У компонента AngularJS есть привязка под названием «name», которая конфликтует с закрытой переменной в UpgradeComponent.

The name attribute conflicts with a private variable on UpgradeComponent

Есть ли простой способ обойти это?

1 Ответ

0 голосов
/ 18 мая 2018

К сожалению, похоже, что нет простого решения для этого.

Typescript предотвращает доступ к закрытым свойствам родительских классов. Обойти это могло бы сломать цель установки переменной в private. Если вы также измените свойство name вашего дочернего класса на private, предупреждение изменится на «Типы имеют отдельные объявления свойства« name »». Они предотвращают это, потому что в скомпилированном коде вы всегда сначала получаете свойства, объявленные в дочернем классе - если вы предоставите свое собственное значение в дочернем классе, вы не получите доступ к значению, которое вы имели бы, если бы Вы создали базовый класс.

В этом конкретном случае UpgradeComponent использует свойство 'name' для хранения имени селектора, которое вы передаете вызову super () в конструкторе. Переопределение этого с вашим собственным локальным свойством после факта может потенциально вызвать нежелательное поведение. Поэтому, чтобы предотвратить это, команда Angular помечает эту переменную как приватную, поэтому вы не можете ее переопределить.

Вот Typescript Playground, чтобы использовать, чтобы увидеть, что на самом деле происходит в скомпилированном коде: Playground

В этом случае, я думаю, вам лучше всего создать новое свойство в компоненте Angular 1.x, которое вы можете использовать в качестве псевдонима для свойства name, которое нельзя переопределить.

...