在前面幾節(jié)教程中,代碼比較少,為了方便說明問題筆者將控制器代碼都寫在了HTML頁面中,實際上這并不是什么好的編程習(xí)慣,而且可維護性差。通常的做法都是將處理業(yè)務(wù)邏輯的代碼寫在一個單獨的JS文件中,然后在HTML頁面中引入該文件。
然而這樣會帶來新的問題,我們的控制器全都定義在全局的命名空間中,假設(shè)我們有一個公共的JS文件,在登錄頁面和密碼修改頁面都引入這個JS,A開發(fā)人員和B開發(fā)人員英雄所見略同,對控制器的命名都是UserController,這樣就會導(dǎo)致命名沖突。而且我們在新增一個控制器的時候總是要擔(dān)心是不是已經(jīng)有了一個同名的控制器,代碼的擴展性是不是很差呢?
AngularJS中的模塊能夠很好的解決這個問題,接下來我們看看AngularJs怎么處理命名沖突問題。
代碼清單1. tutorial04_1.html
<!DOCTYPE html> <html ng-app="loginMod"> <head lang="en"> <meta charset="UTF-8"> <script type="text/javascript" src="angular-1.3.0.14/angular.js"></script> <title>tutorial04_1</title> </head> <body> <div ng-controller="UserController"> 用戶名:<input type="text" ng-model="name" placeholder="用戶名"/> 密碼:<input type="password" ng-model="pword" placeholder="密碼"/> <button ng-click="login()">提交</button> <p>您輸入的用戶名:{{name}}</p> <p>您輸入的密碼:{{pword}}</p> </div> <script type="text/javascript" src="js/tutorial04.js"> </script> </body> </html>
代碼清單2. tutorial04_2.html
<!DOCTYPE html> <html ng-app="pwordMod"> <head lang="en"> <meta charset="UTF-8"> <script type="text/javascript" src="angular-1.3.0.14/angular.js"></script> <title>tutorial04_2</title> </head> <body> <div ng-controller="UserController"> 密碼:<input type="password" ng-model="pword" placeholder="密碼"/> <button ng-click="changePwrd()">提交</button> <p>您輸入的密碼:{{pword}}</p> </div> <script type="text/javascript" src="js/tutorial04.js"> </script> </body> </html>
代碼清單3. tutorial04.js
var loginMod = angular.module("loginMod", []); loginMod.controller("UserController",function($scope,$log) { $scope.name="admin"; $scope.pword="123456"; $log.info( $scope.name); $log.info( $scope.pword); $scope.login = function() { alert("登錄"); } } ); var pwordMod = angular.module("pwordMod", []); pwordMod.controller("UserController",function($scope,$log) { $scope.pword="123456"; $scope.changePwrd = function() { alert("修改密碼"); } } );
我們有登錄頁面tutorial04_1.html和修改密碼頁面tutorial04_2.html,控制器代碼都寫在tutorial04.js中,在這兩個頁面中都定義了相同的控制器UserController。
var loginMod = angular.module("loginMod", []);
通過這行代碼定義模塊,第一個參數(shù)為模塊名。第二個參數(shù)是一個數(shù)組,為可選,如果指定該參數(shù)則創(chuàng)建一個新的模塊,不指定則從配置中檢索。
loginMod.controller("UserController",function($scope,$log)...
通過controller函數(shù)向模塊中添加一個控制器,第一個參數(shù)為控制器名稱,第二個參數(shù)為控制器實現(xiàn)部分。
然后在tutorial04_1.html和tutorial04_2.html就可以使用ng-app="loginMod"和ng-app="pwordMod"來指定頁面中的控制器屬于哪個模塊。
在瀏覽器中運行頁面可以看到,不同頁面調(diào)用不用模塊中的UserController控制器:
Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號-2
違法及侵權(quán)請聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市萬商天勤律師事務(wù)所王興未律師提供法律服務(wù)