"частный" и "общественный" в угловом компоненте 2


если я не добавить частная до foo,loadBar иtext, Я считаю, что они общественные по умолчанию.

export class RandomComponent {
  @Input() foo: string;
  @Output() loadBar = new EventEmitter();
  text: string;
}

есть ли какой-либо случай использования, когда они public в компоненте?

по причине инкапсуляции/безопасности, я должен всегда добавлять private для всех из них, как ниже?

export class RandomComponent {
  @Input() private foo: string;
  @Output() private loadBar = new EventEmitter();
  private text: string;
}

спасибо

2 70

2 ответа:

есть что сказать в ответ на этот вопрос, это первые мысли, которые пришли мне в голову:

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

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

то же самое public: это тоже конструкция только для компиляции, поэтому тот факт, что члены класса являются public по умолчанию, в то время как true, имеет ровно нулевое значение во время выполнения. Но когда у вас есть член, который вы явно намереваетесь предоставить внешнему миру как часть API вашего класса, вы должны абсолютно сделать это public чтобы сигнализировать об этом намерении: вот что public для.

это все применимо к TypeScript в целом. В частности, в Angular существуют определенно допустимые варианты использования для наличия открытых членов в классах компонентов: например, когда реализация контейнеров/составляющая (он же умный/тупой) шаблон, с "тупыми" детьми, вводящими "умных" родителей через инъекцию конструктора, чрезвычайно важно сообщить свое намерение о том, какие члены на родителе должны и не должны касаться детей: в противном случае, не удивляйтесь, когда вы поймаете этих тупых детей, дурачащихся в шкафу с алкоголем своих родителей.

Итак, мой ответ на ваш вопрос:

должен ли я всегда добавлять private для всех из них, как показано ниже?

это подчеркнуто нет. Вы не должны всегда добавить private потому что при этом вы побеждаете цель ключевого слова, потому что он больше не сигнализирует о каком-либо намерении, если вы поместите его везде: вы можете также не помещать его нигде.

@drewmoore предоставляет хороший ответ в том, что частным и государственным сводится к намерению. Но есть еще несколько вещей, которые следует учитывать при использовании введенных частных значений:

Если мы хотим излучать TypeScript как результат процесса компиляции AoT мы должны убедиться, что мы получаем доступ только к открытым полям в шаблонах наших компоненты**