Подтвердить что ты не робот

Как запустить два отдельных приложения Angular js на одной странице

Новое для Angular. Я чувствую, что мне не хватает чего-то очевидного: разве я не могу легко запускать отдельные приложения (модули) на одной странице html? Что-то вроде этого:

  <section ng-app="HelloWorldApp" ng-controller="HelloWorldController">
    Hello {{name}}!
  </section> 
  <br />
  <section ng-app="MyNameIsApp" ng-controller="MyNameIsController">
    My Name is {{FirstName}} {{LastName}}!
  </section> 

JavaScript:

var HelloWorldApp = angular.module('HelloWorldApp', []);
HelloWorldApp.controller('HelloWorldController', function($scope) {
  $scope.name = 'World';
});

var MyNameIsApp = angular.module('MyNameIsApp', []);
MyNameIsApp.controller('MyNameIsController', function($scope) {
  $scope.FirstName = 'John';
  $scope.LastName = 'Smith';
});

Это работает только первый модуль, а второй - ничего не делает. Я хочу сделать это, чтобы я мог создавать многоразовые инкапсулированные директивы для нескольких страниц, которые не должны называть их модули одинаковыми.

Live Пример: http://plnkr.co/edit/cE6i3ouKz8SeQeA5h3VJ


Мы закончили создание небольшой иерархии модулей, однако мой первоначальный вопрос может быть выполнен с небольшим количеством работы (см. ниже).

4b9b3361

Ответ 1

Возможно, но это требует немного кодирования вручную. Вам необходимо самостоятельно загружать приложения angular. Не беспокойтесь, это не так сложно

  • Не добавляйте в свой HTML ng-app атрибуты
  • Убедитесь, что вы можете получить элементы DOM, содержащие приложение
  • Когда DOM загружается, вам необходимо запустить приложения самостоятельно: angular.bootstrap( domElement, ['AppName']);

Вилка вашего плункера, который работает: http://plnkr.co/edit/c5zWOMoah2jHYhR5Cktp

Ответ 2

В соответствии с Angular docs для ngApp:

Используйте эту директиву для автоматической загрузки приложения. Единственный директива может использоваться для HTML-документа. Директива обозначает корень приложения и обычно помещается в корень стр.

Кажется, это по дизайну.

Ответ 3

Вы можете указать любые вложенные приложения в модуле def основного.

angular.module("myapp", ['statusapp', 'tickerapp']).controller(....

и в отдельном файле у вас есть другие приложения. Мы используем механизм шаблонов, который скрывает некоторые из них, но вы получите HTML, который содержит вложенные ng-приложения и javascript для каждого из них, который определяет модуль/контроллер. Код выше - это трюк для получения более чем одного загрузочного файла.