写点什么

AngularJS 进阶 (三十九) 基于项目实战解析 ng 启动加载过程

  • 2022-12-16
    上海
  • 本文字数:1370 字

    阅读完需:约 4 分钟

AngularJS进阶(三十九)基于项目实战解析ng启动加载过程

​一、前言

      在AngularJS项目开发过程中,自己将遇到的问题进行了整理。回过头来总结一下 angular 的启动过程。

      下面以实际项目为例进行简要讲解。

二、启动过程讲解

2.1 载入 ng 库

 

2.2 等待,直到 DOM 树构造完毕。

2.3 发现 ng-app,自动进入启动引导阶段。

2.4 根据 ng-app 名称找到相应的路由。

 


2.5 加载默认地址。

2.6 Js 顺序执行,加载相应模版页

sys_tpls/home.html

 


在此,可以看到 index 路由中只是填充了 ui-view 为 sys_login 的 div 模块,填充页面内容为 sys_tpls/sys_login.html。

 

至此,模型、控制器依次登场亮相。可见,此页面关联的控制器为 LoginController。其中用户 ID、密码均进行了 ng-model 的绑定。

 


      至此 angularJS 项目的启动全过程大致讲解完毕。

三、AngularJS 的三种启动方式

3.1 自启动

Angular 会自动的找到 ng-app,将它作为启动点,自动启动。


<!DOCTYPE html><html ng-app="myModule"><head>    <title>New Page</title>    <meta charset="utf-8" /><script type="text/javascript" src="../../vendor/bower_components/angular/angular.min.js"></script>    <script type="text/javascript" src="./02.boot1.js"></script></head><body>    <div ng-controller="MyCtrl">        <span></span>    </div></body></html>
复制代码


JS


var myModule = angular.module("myModule", []);myModule.controller('MyCtrl', ['$scope',    function($scope) {        $scope.Name = "Puppet";    }]);
复制代码

3.2 手动启动

在没有 ng-app 的情况下,只需要在 js 中添加一段注册代码即可


<body>    <div ng-controller="MyCtrl">        <span></span>    </div></body>
复制代码


JS


var myModule = angular.module("myModule", []);myModule.controller('MyCtrl', ['$scope',    function($scope) {        $scope.Name = "Puppet";    }]);/** * 这里要用ready函数等待文档初始化完成 */angular.element(document).ready(function() {    angular.bootstrap(document, ['myModule']);});
复制代码

3.3 多个 ng-app

      ng 中,angular 的 ng-app 是无法嵌套使用的,在不嵌套的情况下有多个 ng-app,他默认只会启动第一个 ng-app,第二个第三个需要手动启动(注意,不要手动启动第一个,虽然可以运行,但会抛异常)


<body>    <div id="app1" ng-app="myModule1">        <div ng-controller="MyCtrl">            <span></span>        </div>    </div>    <div id="app2" ng-app="myModule2">        <div ng-controller="MyCtrl">            <span></span>        </div>    </div></body>
复制代码


JS


/** * 第一个APP * @type {[type]} */var myModule1 = angular.module("myModule1", []);myModule1.controller('MyCtrl', ['$scope',    function($scope) {        $scope.Name = "Puppet";    }]);// angular.element(document).ready(function() {//     angular.bootstrap(app1, ['MyModule1']);// });/** * 第二个APP * @type {[type]} */var myModule2 = angular.module("myModule2", []);myModule2.controller('MyCtrl', ['$scope',    function($scope) {        $scope.Name = "Vincent";    }]);angular.element(document).ready(function() {    angular.bootstrap(app2, ['myModule2']);});
复制代码


发布于: 刚刚阅读数: 4
用户头像

No Silver Bullet 2021-07-09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
AngularJS进阶(三十九)基于项目实战解析ng启动加载过程_项目实战_No Silver Bullet_InfoQ写作社区