118 votes

Comment définir deux apps angulaires / modules dans une seule page ?

Je suis en train d'ajouter deux angulaire applications / modules pour une page. Dans les violons ci-dessous, vous pouvez voir que toujours seulement le premier module, référencé dans le code html, fonctionne correctement, tandis que la seconde n'est pas reconnu par angulaire.

Dans ce fiddle nous ne pouvons exécuter l' doSearch2 méthode, alors que dans le présent violon seul l' doSearch méthode fonctionne correctement.

Je suis à la recherche de la façon de placer correctement les deux angulaire de modules dans une seule page.

123voto

Mark Rajcok Points 85912

Une seule application AngularJS peut être auto-amorcé par document HTML. La première ngApp trouve dans le document sera utilisé pour définir l'élément racine auto-amorçage comme une application. Pour exécuter plusieurs applications dans un document HTML, vous devez manuellement bootstrap utilisant angulaire.bootstrap à la place. AngularJS les applications ne peuvent pas être imbriquées les unes dans les autres. -- http://docs.angularjs.org/api/ng.directive:ngApp

Voir aussi

38voto

luisperezphd Points 3220

J'ai créé un autre directive qui n'a pas de ngApp's limites. Il s'appelle ngModule. C'est ce que vous code devrait ressembler lorsque vous l'utilisez:

<!DOCTYPE html>
<html>
    <head>
        <script src="angular.js"></script>
        <script src="angular.ng-modules.js"></script>
        <script>
          var moduleA = angular.module("MyModuleA", []);
          moduleA.controller("MyControllerA", function($scope) {
              $scope.name = "Bob A";
          });

          var moduleB = angular.module("MyModuleB", []);
          moduleB.controller("MyControllerB", function($scope) {
              $scope.name = "Steve B";
          });
        </script>
    </head>
    <body>
        <div ng-modules="MyModuleA, MyModuleB">
            <h1>Module A, B</h1>
            <div ng-controller="MyControllerA">
                {{name}}
            </div>
            <div ng-controller="MyControllerB">
                {{name}}
            </div>
        </div>

        <div ng-module="MyModuleB">
            <h1>Just Module B</h1>
            <div ng-controller="MyControllerB">
                {{name}}
            </div>
        </div>
    </body>
</html>

Vous pouvez obtenir le code source:

http://www.simplygoodcode.com/2014/04/angularjs-getting-around-ngapp-limitations-with-ngmodule/

C'est essentiellement le même code utilisé à l'interne par AngularJS sans les contraintes.

9voto

Wouter Points 111

Vous pouvez bootstraper plusieurs applications angulaires, mais :

1) vous devez amorcer manuellement les

2) vous ne devez pas utiliser « document » comme la racine, mais le nœud où l’interface angulaire est contenu dans :

Ce serait sans danger.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X