1. 程式人生 > >AngularJS進階 三十九 基於專案實戰解析ng啟動載入過程

AngularJS進階 三十九 基於專案實戰解析ng啟動載入過程

基於專案實戰解析ng啟動載入過程

前言

      在AngularJS專案開發過程中,自己將遇到的問題進行了整理。回過頭來總結一下angular的啟動過程。

      下面以實際專案為例進行簡要講解。

1.載入ng庫

 

2.等待,直到DOM樹構造完畢。

3.發現ng-app,自動進入啟動引導階段。

4.根據ng-app名稱找到相應的路由。

 

5.載入預設地址。

6.Js順序執行,載入相應模版頁

sys_tpls/home.html

 

7.在此,可以看到index路由中只是填充了ui-view為sys_login的div模組,填充頁面內容為sys_tpls/sys_login.html。

sys_tpls/sys_login.html

 

      至此,模型、控制器依次登場亮相。可見,此頁面關聯的控制器為LoginController。其中使用者ID、密碼均進行了ng-model的繫結。

 

      至此angularJS專案的啟動全過程大致講解完畢。

注:AngularJS的三種啟動方式

方式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";
    }
]);

 

方式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:多個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']);
});

 

美文美圖

 

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!希望你也加入到我們人工智慧的隊伍中來!http://www.captainbed.net