Редагувати: Ця відповідь зараз неправильна. Офіційних вказівок з цієї теми не було, коли я розміщував її, але як пояснено у відповіді @ Ярослова (відмінна і правильна), це вже не так: Codelizer тепер попереджає, а компіляція AoT не зможе посилатися на приватні змінні в шаблонах компонентів. . Однак на концептуальному рівні все тут залишається дійсним, тому я залишу цю відповідь, як здається, була корисною.
Так, це очікується.
Майте на увазі, що private
та інші модифікатори доступу - це конструкції Typescript, тоді як компонент / контролер / шаблон - це кутові конструкції, про які Typescript нічого не знає. Модифікатори доступу контролюють видимість між класами: Створення поля private
не дозволяє іншим класам мати доступ до нього, але шаблони та контролери - це речі, які існують у межах класів.
Це технічно не відповідає дійсності, але (замість того, щоб зрозуміти, як класи відносяться до декораторів та їх метаданих), можливо, було б корисно подумати про це так, адже важлива річ (IMHO) - перейти від роздумів про шаблон і контролер як про окремий суб'єкти, які думають про них як про уніфіковані частини конструкції Компонента - це один з головних аспектів ментальної моделі ng2.
Думаючи про це таким чином, очевидно, ми очікуємо, що private
змінні класу компонентів будуть видимими в його шаблоні, з тієї ж причини ми очікуємо, що вони будуть видимими у private
методах цього класу.