AngularJS中一个HTML文档启动多个应用

一、ng-app指令自动启动应用
一个html文档一般只使用ng-app指令定义一个angular应用,例如在AngularJS简单的helloworld示例 中ng-app定义在<html> 节点上,整个文档当成一个angular应用。这种情况下,我们只要在js文件中定义好对应的控制器,应用就能自动的启动,数据模型和模板就能绑定形成视图。那么,当在一个html文档中定义多个ng-app时,是否多个应用都能够正常的启动,并进行数据模型和模板的绑定形成视图了,首先看一下下面的例子:
(1)mutilngapp.html

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8"></meta>
    <script src="angular.js"></script>
    <script src="mutilngapp.js"></script>
</head>
<body>
    <div id="app1" ng-app="app1">
        <div ng-controller="controller">
            <div>{{name}}</div>
        </div>
    </div>
    <div id="app2" ng-app="app2">
        <div ng-controller="controller">
            <div>{{name}}</div>
        </div>
    </div>
</body>
</html>

(2)mutilngapp.js

var app1 = angular.module("app1", []);
app1.controller("controller", ["$scope", function ($scope) {
    $scope.name = "app1";
}]);

var app2 = angular.module("app2", []);
app2.controller("controller", ["$scope", function ($scope) {
    $scope.name = "app2";
}]);

(3)运行结果
这里写图片描述
(4)结果分析
通过运行结果可以看到,只有第一个应用能够正常启动,并进行数据模型和模板的绑定形成视图。也就是说,在一个html文档里使用ng-app指令定义多个应用是,angular只会自动启动第一个使用ng-app定义的应用,后面的应用都不能启动。

二、手动启动多个应用
当需要在一个html文档里同时启动多个应用时,angularJS提供了angular.bootstrap(element, [modules]); 这个函数来启动应用。
看下面的例子:
(1)mutilngapp.html
注意这个html文档与上面的区别,去掉了ng-app指令

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8"></meta>
    <script src="angular.js"></script>
    <script src="mutilngapp.js"></script>
</head>
<body>
    <div id="app1">
        <div ng-controller="controller">
            <div>{{name}}</div>
        </div>
    </div>
    <div id="app2">
        <div ng-controller="controller">
            <div>{{name}}</div>
        </div>
    </div>
</body>
</html>

(2)mutilngapp.js

angular.element(document).ready(function() {
        var app1 = angular.module("app1", []);
        app1.controller("controller", ["$scope", function ($scope) {
            $scope.name = "app1";
        }]);
        var app1DOM = document.getElementById("app1");

        var app2 = angular.module("app2", []);
        app2.controller("controller", ["$scope", function ($scope) {
            $scope.name = "app2";
        }]);
        var app2DOM = document.getElementById("app2");

        angular.bootstrap(app1DOM, ['app1']);
        angular.bootstrap(app2DOM, ['app2']);
});

(3)运行结果
这里写图片描述
(4)结果分析
可以看到,两个应用都正常启动了,数据模型和模板都正常的进行了绑定,形成了正确的视图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值