Как инициализировать контроллер вручную после загрузки приложения?
Я пытаюсь добавить угловые виджеты в существующее неугловое приложение. Проблема состоит в том, что эти виджеты не добавляются Angular, и в основном вводятся в DOM неугловым скриптом.
Первое, что я подумал, это использовать angular.bootstrap
для каждого виджета. Но проблема с этим подходом заключается в том, что я не могу разделить службы между виджетами. Поэтому вместо того, чтобы сделать это, я хочу загрузить приложение Angular один раз и загрузить контроллеры вручную для каждого виджета.
Вот песочница jsbin, где я безуспешно пробовал
Я пытаюсь сделать app1
вручную и app2
автоматически, при совместном использовании sharedThing
оказание услуг.
2 ответа
В конфиге приложения
app.config(function($controllerProvider) {
app.register =
{
controller: $controllerProvider.register
};
}
затем после того, как вы объявите функцию контроллераapp.register.controller('CtrlName',CntrlFn]);
Дэн написал отличную статью об этом. http://weblogs.asp.net/dwahlin/archive/2013/05/22/dynamically-loading-controllers-and-views-with-angularjs-and-requirejs.aspx
Ну, я нашел свой ответ.
Я не знаю, решил ли я это раньше, но мне пришлось позвонить $apply
после перекомпиляции элемента, чтобы увидеть изменения без изменения вручную ввода. Кроме того, я обнаружил, что могу инициализировать угловое приложение с элементом вне DOM, и я могу скомпилировать элементы вне корневого элемента! Это идеально подходит для того, чего я пытаюсь достичь.