Можно ли пометить @ViewChild как закрытое? - PullRequest
0 голосов
/ 04 декабря 2018

Можно ли пометить ViewChild как личное, если на него нет ссылки в шаблоне?

Я смог сделать это, затем собрать и обработать с флагом '--prod' ине обнаружил ошибок.В настоящее время я использую Angular 7.

@ViewChild(HelloComponent) private helloComponent;

Вот стэкблиц к тому, о чем я говорю:
https://stackblitz.com/edit/angular-vxbpuk?file=src%2Fapp%2Fapp.component.ts

Я думаю У меня естьиспользование стека, но вы можете проверить то же самое локально.

РЕДАКТИРОВАТЬ: Я прошу прощения за то, что не поднял это раньше, но есть этот всплеск из углового документа, который дает мне паузу:

https://angular.io/guide/aot-compiler#phase-2-code-generation

Декорированные компоненты класса компонента должны быть открытыми.Вы не можете сделать свойство @Input () частным или внутренним.

Но, как уже указывалось ниже @GCSDC, команда Angular, похоже, использует закрытые члены в своих примерах:
https://angular.io/guide/component-interaction#parent-calls-an-viewchild

Ответы [ 4 ]

0 голосов
/ 18 июля 2019

Это синтаксический сахар, который вы используете машинопись, просто убедитесь, что у вас меньше ошибок и их предотвращают, но, в конце концов, все после компиляции кода возвращается обратно в javascript.И как вы использовали ключевое слово private выше, если вы используете эту переменную только внутри текущего класса, это будет хорошо, но если вы получите доступ к этой переменной в другом классе при создании проекта и развернете, вы получите ошибку.

В JavaScript тамне являются частными или публичными, все закрыто

0 голосов
/ 04 декабря 2018

Да, это нормально.Так как эта область видимости переменной ограничена классом компонента, мы можем объявить его закрытым и использовать.

@ViewChild предназначен для использования внутри компонента для взаимодействия с дочерним компонентом, поэтому мы можем сохранить его в секрете.

0 голосов
/ 04 декабря 2018

Синтаксис private и public является улучшением для языка javascript для «статического анализа» в машинописи транспортер , я бы порекомендовал вам попробовать площадка как машинописный текстпереносится в JS.Так что, по сути, каждый, кто читает код, может получить представление о том, какова область действия переменных / функций.Примером простой переменной внутри класса будет то, что они оба переносятся в один и тот же JS private var1: number = 0, а public var1: number = 0 переносят оба в this.var1 = 0

Однако!Могут быть ситуации, когда вы на самом деле хотели бы получить доступ к @ViewChild из родительского компонента, но в этой ситуации вы должны указать его как @ViewChild(HelloComponent) public helloComponent;, иначе вы получите ошибку «compile / transpile».Если вы хотите дать более четкое представление о том, где будет находиться область действия, оставьте его как private и вместо этого используйте методы получения / установки следующим образом:

export class MyComponent {

  @ViewChild(HelloComponent) private _helloComponent;

  get helloComponent(): any {
    return _helloComponent;
  }

  set helloComponent(set: any) {
    this._helloComponent = set;
  }

}
0 голосов
/ 04 декабря 2018

Кажется, что да, это нормально, так как вы можете найти это также в официальных руководствах по угловым основам, по адресу:

Компоненты и шаблоны> Взаимодействие с компонентами> Родитель вызывает @ViewChild () :

@ ViewChild (CountdownTimerComponent) private timerComponent: CountdownTimerComponent;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...