В Angular у нас есть 2 модели компиляции
JIT - сборка точно в срок : JIT-компиляция, как следует из названия, компилируетJust-in-Time приложения в браузере во время выполнения.
AoT - предварительная компиляция: AoT-компиляция компилирует приложение во время сборки.
По умолчанию при разработке, то есть ng serve
, мы получаем JIT-компиляцию.Вот как это работает.Код приложения вместе с угловым компилятором загружается браузером.Во время выполнения, когда к приложению выдается запрос, JIT-компилятор в браузере компилирует код приложения перед его выполнением.
с производственной сборкой, т.е. ng build --prod
мы получаем AoT-компиляцию, угловое приложениепрекомпилируются.Таким образом, это означает, что браузер загружает исполняемый код, чтобы он мог визуализировать приложение немедленно, не дожидаясь его первой компиляции.
TypeScript public
не имеет значения, но private
делает
Из документов Angular Docs
Все data bound
свойства должны быть открытыми свойствами TypeScript.Angular никогда не привязывается к частному свойству TypeScript.
На самом деле он связывается со свойствами private
, но не в AoT mode
Why AOT Compiler requires public properties, while non-AOT allows private properties?
С помощью JIT мы конвертируем весь код в ES5, а затем во время выполнения делаемпривязки.Все модификаторы видимости теряются в этом процессе, поэтому не имеет значения, говорите ли вы public
или private
для этого.
С другой стороны, с помощью AoT мы генерируем некоторый машинописный код для нашегошаблоны, которые будут пытаться получить доступ к этим полям.Если они private
, они просто не могут получить доступ к этим свойствам, поэтому вам нужно указать их как public
.