Загрузите шаблон AngularJS внутри страницы, динамически - программирование

Загрузите шаблон AngularJS внутри страницы, динамически

У меня есть страница, содержащая 2 контроллера: один, который управляет списком так называемых "приложений", а другой - для размещения нового шаблона Angular в innerHTML его элемента Div.

<div ng-controller="appList"></div>
<div ng-controller="appPane"> Dynamic content should be loaded here! </div>

Я попытался использовать стандартные привязки {{expression}}, но они не работают с html, я также попробовал директиву ng-bind-html-unsafe (привязка innerHTML к типу возврата запроса приложения), но в этом новом коде контроллеры не выполняются.

Проблема заключается в том, что с помощью привязки Angular не повторно анализирует содержимое рассматриваемого html, чтобы использовать его в качестве приложения Angular. Любые идеи о том, как заставить его анализировать динамический контент?

4b9b3361

Ответ 1

Взгляните на uiRouter (из AngularUI проект). Он добавляет концепцию состояний, которые довольно похожи на маршруты, но с другими положительными героями, такими как способность их гнездовать. Например:

$stateProvider
    .state('myState', {
        url: '/mystate',
        templateUrl: '...',
        controller: 'MyCtrl'
    })
    .state('myState.substate', {
        url: '/{substate}',
        templateUrl: '...',
        controller: 'MySubCtrl'
    });

MySubCtrl будет активироваться всякий раз, когда вы переходите к /mystate/something, и вы можете использовать это "что-то" в качестве параметра (см. $stateParams). Вы можете устанавливать состояния на любое количество уровней.

Ответ 2

Похоже, что служба компиляции $при подаче элементов, которые вы хотите перекомпилировать вместе с вашей текущей областью, выполняет то, что я искал.

Пример из моего источника:

var appPane = $('#AppPane');//JQuery request for the app pane element.
appPane.html(data);//The dynamically loaded data
$compile(appPane.contents())($scope);//Tells Angular to recompile the contents of the app pane.

Это должно помочь любому, кто испытывает мою проблему, надеюсь.