Для этого сценария у меня есть страница HTML с некоторыми директивами AngularJS, контроллерами и т.д.
Что-то вроде этого:
<html>
<body>
<div ng-controller="myCtrl">
<ul><li ng-repeat="item in items">{{item.name}}</li></ul>
</div>
<div class="placeholder">
...new HTML here...
</div>
</body>
</html>
Обратите внимание, что на странице нет директивы ng-app
. Я не полагаюсь на автоматическую загрузку, но я использую метод ручной начальной загрузки.
angular.bootstrap(document, ['myApp']);
Сначала я создаю модуль, который будет загружен в документ. Затем, когда загружается динамически определенный список зависимостей, я прикрепляю некоторые службы, контроллеры и т.д. Как только все будет готово, я вызываю метод начальной загрузки.
Все это прекрасно работает, пока JavaScript за пределами AngularJS не добавится к DOM в ...new HTML here...
. Новый HTML не обрабатывается AngularJS.
Я понимаю, что вам нужно вызвать $scope.$apply()
или $digest()
или что-то, чтобы заставить AngularJS распознавать новый HTML. Однако в моем примере нет контроллера вокруг нового HTML-кода. Входящий HTML-код может выглядеть так:
<div ng-controller="myOtherCtrl">
<h2>{{model.title}}</h2>
</div>
Другими словами, он полагается на другой контроллер в модуле приложения.
- Я не могу снова вызвать метод
angular.bootstrap
, потому что страница уже связана. - Я не могу вызывать
$scope.$apply
изнутри контроллера, потому что все дело в том, что код контроллера не вызывается. - Я не вижу способа получить ссылку на контроллер, чтобы повторно применить или обновить его.
Я прочитал сообщение Ifeanyi Isitor lazy loading post и сообщение