Как инициализировать контроллер вручную после загрузки приложения?

Я пытаюсь добавить угловые виджеты в существующее неугловое приложение. Проблема состоит в том, что эти виджеты не добавляются 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, и я могу скомпилировать элементы вне корневого элемента! Это идеально подходит для того, чего я пытаюсь достичь.

В любом случае, вот jsBin с работающим кодом.

Другие вопросы по тегам