Как вы знаете, AngularJS имеет 2 различные фазы во время начальной загрузки:
- фаза конфигурации
- фазы запуска
От official documentation:
Модуль представляет собой набор от конфигурация и запустите блоков, которые получают , применяемые к приложению во время процесса начальной загрузки. В своей простейшей форме модуль состоит из набора двух видов блоков:
- конфигурации блоков - получить выполненные во время регистрации поставщика и фазы конфигурации. В конфигурационные блоки могут быть введены только поставщики и константы . Это необходимо для предотвращения случайного экземпляра служб до того, как они были полностью установлены .
- Выполнить блоки - выполнить после создания форсунки и использовать для запуска приложения. Только экземпляры и константы могут быть введены в блокировку . Это необходимо для предотвращения дальнейшей конфигурации системы во время выполнения приложения.
В приведенной выше цитате я выделил предложение о прогонов блоков:
Это делается для предотвращения дальнейшей настройки системы во время выполнения прикладной программы времени
Теперь, AngularJS documentation about decorator:
Как с $provide.decorator
, функция module.decorator
работает во время фазы конфигурации приложения. Это означает, что вы можете определить модуль module.decorator до того, как будет определен оформленный сервис.
Так украшение контроллера (или службы или фильтра) выполняется в фазе конфигурации не в фазе выполнения.
По этой причине ваш «асинхронно регистрация декоратора» пример не работает: вы пытаетесь определить и украсить контроллер внутри функций initCtrl
. Но последнее вызвано в фазе , и уже слишком поздно определять новые декораторы на этом этапе.
Что не работает? Что такое сообщение об ошибке? Что делает 'MyDecorator', где он используется? – Bergi
Угловой не поддерживает ленивые компоненты. Вы можете посмотреть [ocLazyLoad] (https://github.com/ocombe/ocLazyLoad). – zeroflagL
@Bergi Там нет ошибок, он просто не работает –