1. 定義
控制器(Controller)在AngularJS中作用是增強視圖(View),AngularJS控制器是一個構造方法,用來向視圖(View)中添加額外功能。
ng-controller指令定義AngularJS應用程序控制器。
控制器是JavaScript對象,由標准的JavaScript對象的構造函數創建。
當控制器通過ng-controller指令被添加到DOM頁面時,AngularJS會通過控制器構造函數生成一個對象。
在生成構造函數對象過程中,$scope對象作為參數注入其中,並允許訪問$scope對象。
通過$scope對象與頁面中的元素進行數據綁定,實現數據從控制器(Controller)到視圖(View)的過程。$scope對象可以看作是由控制器(Controller)封裝后的ViewModel。
<div ng-app="myApp" ng-controller="myCtrl">
ng-controller="myCtrl" 屬性【div標簽的一個屬性】是一個 AngularJS 指令。用於定義一個控制器。myCtrl 函數是一個 JavaScript 函數。
<div ng-app="myApp" ng-controller="myCtrl">
名: <input type="text" ng-model="firstName"><br> 姓: <input type="text" ng-model="lastName"><br> <br> 姓名: {{firstName + " " + lastName}} </div> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.firstName = "John"; $scope.lastName = "Doe"; }); </script>
控制器在作用域中創建了兩個屬性(firstName 和lastName)。還可以創建函數。
ng-model 指令 綁定輸入域到控制器的屬性(firstName 和 lastName)。
2、controller參數含義
Eg:var app = angular.module('app',['ngPlugin']);
app.controller('frontTourism',['$scope','$http','stModal','$timeout','ngSubmit','alert',function(){/*省略*/}])
第一個參數:控制器名稱
第二個參數:模塊注入,引入你需要用到的其他模塊【js文件】。比如$http就是一個模塊。只有注入這些對象,function中才能使用。
$scope 頁面傳值需要 ,$http http請求需要
一個對象通常有三種方式可以獲得對其依賴的控制權:
(1) 在內部創建依賴;
(2) 通過全局變量進行引用;
(3)在需要的地方通過參數進行傳遞。
Angular的依賴注入是通過第三種方式實現的。其余兩種方式會帶來各種問題,例如污染全局作用域,使隔離變得異常困難等。
從功能上看,依賴注入會事先自動查找依賴關系,並將注入目標告知被依賴的資源,這樣就可以在目標需要時立即將資源注入進去。
Angular有3種注入方式:
a、推斷式注入
app.controller('MyCtrl', function($scope) {
});
b、標注式注入
var myFunc=function($scope) {
});
myFunc.$inject = ['$scope'];
app.controller('MyCtrl',myFunc);
c、內聯注入
app.controller('MyCtrl', ['$scope', function($scope) {
}]);
第1種是根據寫的參數名稱,如$scope,內部自己調用$inject把$scope進行依賴注入,如果在前端開發中使用壓縮工具,就會把$scope變成另外的字母了,就無法進行推斷了,而另外兩種方式你可以把function($scope)改成function(a)都沒關系;
第2種要多寫一行代碼;
一般推薦使用第3種。
一個頁面一個控制器,,各個控制器中相同的部分放在service中,各控制器去調用。