Controller組件(http://www.angularjs.cn/A00C)javascript
在AngularJS中,控制器是一個Javascript函數(類型/類),用來加強除了根做用域之外的做用域實例的。當你或者AngularJS自己經過scope.$new倆建立一個新的子做用域對象時,有一個選項能讓你將它當作參數傳遞給控制器。這能使AngularjS將控制器和這個做用域聯繫起來,加強做用域的行爲。css
控制器用於:html
正確使用控制器:java
保持控制器職責單一的最多見作法是將那些不屬於控制器的工做抽離到服務中,而後經過依賴注入在控制器中使用這些服務。這在依賴注入服務的章節中會詳細討論。jquery
不要用控制器幹下面的事情:angularjs
控制器構造函數和方法的例子bootstrap
爲了闡述AngularJS的控制器組件的運行原理,讓咱們來建立一個擁有下面這些組件的小應用:數組
模板中的消息包含了一個對spice模型的綁定,它初始的字符串是「very」。這個spice模型會被設置成 chili 或者 jalapeno,這取決於哪一個按鈕會被點擊。消息會經過data-binding自動更新。app
一個 spice 控制器例子(闡述了控制器的特色:1給對象初始化2給對象添加行爲)ide
<body ng-controller="SpicyCtrl">
<button ng-click="chiliSpicy()">Chili</button>
<button ng-click="jalapenoSpicy()">Jalapeño</button>
<p>The food is {{spice}} spicy!</p>
</body>
function SpicyCtrl($scope) {
$scope.spice = 'very';
$scope.chiliSpicy = function() {
$scope.spice = 'chili';
}
$scope.jalapenoSpicy = function() {
$scope.spice = 'jalapeño';
}
}
例子中有下面這些須要注意:
Angularjs 過濾器(學習文章:http://www.tuicool.com/articles/ueUZBv)
filter的自定義方式也很簡單,使用module的filter方法,返回一個函數,該函數接收輸入值,並返回處理後的結果。話很少說,咱們來寫一個看看。好比我須要一個過濾器,它能夠返回一個數組中下標爲奇數的元素,代碼以下:
app.filter('odditems',function(){
return function(inputArray){
var array = [];
for(var i=0;i<inputArray.length;i++){
if(i%2!==0){
array.push(inputArray[i]);//(d) push() 方法可向數組的末尾添加一個或多個元素,並返回新的長度。 此例子中將數組下標爲基數的值,賦值給空數組array
}
}
return array;
}
});
實例代碼:
<!DOCTYPE html> <html ng-app="xmpl"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Controller組件實例學習</title> <link rel="stylesheet" href="css/bootstrap.min.css"> <script src="js/jquery-1.11.3.min.js"></script> <script src="js/bootstrap.min.js"></script> <script src="js/angular.min.js"></script> <script type="text/javascript">var app=angular.module('xmpl',[]);</script> <style type="text/css"> .border{border: 2px solid #ccc; width: 80%; margin: 20px auto;} </style> </head> <body > <div class="border"> <!-- 控制器方法參數的例子 ============================================ --> <h3>1.控制器方法參數的例子</h3> <ul> <li>一個有兩個按鈕和一條消息的模板</li> <li>一個叫<code class="prettyline">spice</code>的字符串模型。</li> <li>一個擁有兩個方法的控制器。方法是用來設置<code class="prettyline">spice</code>的值得。</li> </ul> <div ng-controller="SpicyCtrl"> <input ng-model="customSpice" value="wasabi"> <button ng-click="spicy('chili')">Chili</button> <button ng-click="spicy(customSpice)">Custom spice</button> <p>The food is {{spice}} spicy!</p> </div> <script type="text/javascript"> app.controller('SpicyCtrl',function ($scope) { $scope.spice = 'very'; $scope.spicy = function(spice) { $scope.spice = spice; } }); </script> </div> <!-- 控制器繼承示例 =========================================== --> <div class="border"> <h3>2.控制器繼承示例,做用域層級</h3> <ul> <li> 根做用域</li> <li>MainCtrl做用域, 它包含了模型timeOfDay和模型name。</li> <li>ChildCtrl做用域,它繼承了上層做用域的timeOfDay,複寫了name。</li> <li>BabyCtrl做用域,複寫了MainCtrl中定義的timeOfDay和ChildCtrl中的name。</li> </ul> <div ng-controller="MainCtrl"> <p>Good {{timeOfDay}}, {{name}}!</p> <div ng-controller="ChildCtrl"> <p>Good {{timeOfDay}}, {{name}}!</p> <p ng-controller="BabyCtrl">Good {{timeOfDay}}, {{name}}!</p> </div> </div> <script type="text/javascript"> app.controller('MainCtrl',function ($scope) { $scope.timeOfDay = 'morning'; $scope.name = 'Nikki'; }); app.controller('ChildCtrl',function ($scope) { $scope.name = 'Mattie'; }); app.controller('BabyCtrl',function ($scope) { $scope.timeOfDay = 'evening'; $scope.name = 'Gingerbreak Baby'; }); </script> </div> <!-- 3.Angularjs 反向輸出字符串過濾器 ==================================--> <div class="border"> <h3>3.Angularjs 過濾器</h3> <div ng-controller="Ctrl"> <input ng-model="greeting" type="greeting"><br> No filter: {{greeting}}<br> Reverse: {{greeting|reverse}}<br> Reverse + uppercase: {{greeting|reverse:true}}<br> </div> </div> <script> app.filter('reverse', function() { return function(input, uppercase) { var out = ""; for (var i = 0; i < input.length; i++) { out = input.charAt(i) + out; } // conditional based on optional argument if (uppercase) { out = out.toUpperCase(); } return out; } }); app.controller('Ctrl',function ($scope) { $scope.greeting = 'hello'; }); </script> <!-- 反向輸出字符串測試======================== --> <div class="border"> <h3>反向輸出字符串測試</h3> <p>reverse 函數的測試 ,運用到charAt()函數:(d)charAt() 方法可返回指定位置的字符,返回的字符是長度爲 1 的字符串 (m) stringObject.charAt(index)</p> <p>Input field: <input type="text" id="test3" value="Mickey Mouse"></p> <button id="btn3">設置值</button> <script> $(document).ready(function(){ $("#btn3").click(function(){ var result=reverse($("#test3").val()); $("#test3").val(result); }); }); function reverse(input){ var out=""; for (var i = 0; i < input.length; i++) { out = input.charAt(i) + out; } return out; } </script> </div> </body> </html>