При написании контроллеров AngularJS я часто задаюсь вопросом, где было бы лучше всего написать логику инициализации.Где написать логику инициализации контроллера
Для этой иллюстрации предположим, что я выделил свою логику инициализации в отдельный метод init()
.
Насколько я могу сказать, у меня есть три возможных способа вызвать это как часть контроллера запуска:
инициализации в конструкторе - В соответствии с предлагаемыми решениями для other questions, вам может вызывать
init()
от конструктора. Инициализация-в-конструкторе широко используется как анти-шаблон на большинстве языков. Я особенно против этого, потому что у меня есть варианты использования, где у меня есть наследование классов, и не хотел бы, чтобы родительский конструктор вызывалinit()
(который, возможно, был переопределен в дочернем классе) до того, как дочерний конструктор завершил выполнение.нг-INIT - Invoke
init()
с помощью нг-init` директиву в представлении. Это не очень удобно, поскольку это связано с моим взглядом на внутреннюю работу моего контроллера.задержка инициализации из конструктора - Используйте
$timeout
службу, чтобы запланировать вызовinit()
после задержки 0 миллисекунд. Это позволит полностью завершить выполнение дочернего конструктора до вызова логики инициализации.
Ни одно из этих решений не представляет собой чрезмерно чистый способ решения такой основной проблемы. Есть ли альтернативы, которые я забыл?