Я столкнулся с тем, что, по моему мнению, является распространенным сценарием, в котором я использую шаблон MVC (в частности, структуру ASP.NET MVC) для веб-приложения с AngularJS на интерфейсе. Моя проблема в том, что у меня есть особое значение, которое является частью модели, передаваемой моему представлению, и я также хочу сделать доступной для моей области Angular controller $, в идеале, как только инициализируется контроллер.
Как это сделать, это вопрос, который задавали и отвечали раньше. Там есть очевидный кандидат: ngInit
. Однако в какой-то момент Angular обновлена их документация с тем, что, как представляется, является предупреждением против этой конкретной мысли:
Единственное подходящее использование
ngInit
- для сглаживания специальных свойствngRepeat
, как показано в демонстрации ниже. Помимо этого случая, вы должны использовать контроллеры вместоngInit
для инициализации значений в области.
Рекомендуемая альтернатива не очень актуальна.
Конечно, есть и другие обходные пути, о которых я могу думать. Например, представление может вставить значение в директиву ngModel
на скрытый ввод. Или я мог просто игнорировать предупреждение и использовать ngInit
в любом случае. Но любой, о котором я могу думать, является либо уродливым способом сделать то же самое, что и ngInit
, либо явно хуже.
В конечном счете тот факт, что то, что кажется очевидным решением для меня, по-видимому, является неправильным, вероятно, является показателем того, что мое мышление не соответствует тем, как предполагается Angular. Поэтому мой вопрос заключается не в том, "как я могу справиться с этим сценарием", а именно:
- Как я должен заниматься или избегать этого сценария?
- Почему я не должен использовать
ngInit
?
Прояснение, так как из первых двух комментариев это не ясно: это для ситуации, когда некоторая или большая часть страницы обслуживается непосредственно как представление MVC, причем только определенная часть функциональности предоставляется Angular. Данные, которые я хочу передать моему контроллеру Angular, уже переданы в представление в модели. Я не хочу, чтобы контроллер Angular затем пошел и должен выполнить свой собственный запрос на сервер, чтобы получить тот же параметр, который уже доступен для представления в другом формате.