Edycja: ta odpowiedź jest teraz nieprawidłowa. Nie było oficjalnych wskazówek na ten temat, kiedy to opublikowałem, ale jak wyjaśniono w odpowiedzi @ Yaroslova (doskonała i poprawna), to już nie ma miejsca: Codelizer ostrzega teraz i kompilacja AoT nie powiedzie się w przypadku odwołań do zmiennych prywatnych w szablonach komponentów . To powiedziawszy, na poziomie koncepcyjnym wszystko tutaj pozostaje aktualne, więc zostawię tę odpowiedź, ponieważ wydaje się być pomocna.
Tak, jest to oczekiwane.
Należy pamiętać, że private
i inne modyfikatory dostępu są konstrukcjami Typescript, podczas gdy komponent / kontroler / szablon to konstrukcje kątowe, o których Typescript nic nie wie. Modyfikatory dostępu kontrolują widoczność między klasami: utworzenie pola private
uniemożliwia innym klasom dostęp do niego, ale szablony i kontrolery to elementy, które istnieją w klasach.
To nie jest technicznie prawda, ale (zamiast rozumieć, w jaki sposób klasy odnoszą się do dekoratorów i ich metadanych), warto pomyśleć o tym w ten sposób, ponieważ ważne jest (IMHO) odejście od myślenia o szablonie i kontrolerze jako osobnych by traktować je jako zjednoczone części konstrukcji komponentu - jest to jeden z głównych aspektów modelu mentalnego ng2.
Myśląc o tym w ten sposób, oczywiście oczekujemy, że private
zmienne w klasie komponentów będą widoczne w jej szablonie, z tego samego powodu, dla którego oczekujemy, że będą widoczne w private
metodach tej klasy.