接著要介紹Angular js的另一個特性Controller。
Controller本身能做的事情大概有二:
1.對scope設置初始值(scope泛指應用程式所使用到的物件模型)
2.在scope上增加額外的處置,簡單來說就是寫程式的區塊。
範例一:
給定初始值,input中會有來自controller的文字。
原始碼:
Demo:
範例二:
定義Methods,在<a>利用ng-click binding method並且利用ng-init設置初始值。
並在Controller中定義method並給定 button ng-click事件。
原始碼:
範例三:
利用Controller定義model並給定初始值,
使用ng-repeat將所有model dump出來。
原始碼
Demo:
範例四:
在Controller中使用$timeout,利用其類似Timer的特性引發timeout事件,
形成倒數效果使得button於timeout後即被block,
除非在該div內有mouseup動作始重新計時。
原始碼:
Demo:
給定初始值,input中會有來自controller的文字。
原始碼:
<!DOCTYPE html> <html ng-app> <head> <script src="http://code.angularjs.org/1.2.0/angular.min.js"></script> <meta charset="utf-8" /> <script type="text/javascript"> //Controller function urCtrl($scope){ $scope.urName="it was inited from controller"; } </script> </head> <body> <!-- Smapel ng-controller --> <div class="box" ng-controller="urCtrl"> Sample ng-controller----------------<br> Type in ur Name<input name="input" ng-model="urName"><br> Hi~ {{urName}}!!!! </div> </body> </html>
Demo:
Sample ng-controller----------------
Type in ur Name
Hi~ {{urName}}!!!!
Type in ur Name
Hi~ {{urName}}!!!!
範例二:
定義Methods,在<a>利用ng-click binding method並且利用ng-init設置初始值。
並在Controller中定義method並給定 button ng-click事件。
原始碼:
<script type="text/javascript"> //Controller function ClickCtrl ($scope) { $scope.map = function(){ $scope.test=$scope.count; } } </script> <!-- Smapel <a> with ng-click n use ng-init aicltest--> <div class="box" ng-controller="ClickCtrl" > Sample <a>----------------<br> <input type="button" ng-click="count = count + 1" ng-init="test=0" value="type to Increment"><br> <input type="button" ng-click="map()" value="map value"><br> <!--在{{}}之中定義的model沒有那麼嚴謹,基本上只有用變數,就可以使用。--> <tt>count: {{test}}</tt><br> </div>Demo:
Sample <a>----------------
count: {{test}}
count: {{test}}
範例三:
利用Controller定義model並給定初始值,
使用ng-repeat將所有model dump出來。
原始碼
<script type="text/javascript"> //Controller function repeatCtrl ($scope) { $scope.names = ['Lily', 'Lucy', 'Marry', 'John', 'Nana']; $scope.items = [ {title: 'A', status: '0'}, {title: 'B', status: '1'}, {title: 'C', status: '2'}]; } </script> <!-- Smapel ng-repeat with ng-submit--> <div class="box2" ng-controller="repeatCtrl"> Sample ng-repeat -------------<br> <tt ng-repeat="name in names"> {{$index+1}}.{{name}} <span class="error" ng-show="$first">first Data </span> <span class="error" ng-show="$middle">middle Data </span> <span class="error" ng-show="$last">last Data </span> <br> </tt> There are {{names.length}} data<br> <ul> <li ng-repeat ="item in items">{{item.title}}</li> </ul> There are {{items.length}} data<br> </div>
Demo:
Sample ng-repeat -------------
{{$index+1}}.{{name}}
first Data
middle Data
last Data
There are {{names.length}} data
{{$index+1}}.{{name}}
first Data
middle Data
last Data
There are {{names.length}} data
- {{item.title}}
範例四:
在Controller中使用$timeout,利用其類似Timer的特性引發timeout事件,
形成倒數效果使得button於timeout後即被block,
除非在該div內有mouseup動作始重新計時。
原始碼:
<script type="text/javascript"> //Controller //一定要在Controller中寫入timeout變數 function timeoutCtrl($scope,$timeout){ $scope.Timer = 5; $scope.onTimeout = function(){ if($scope.Timer<=0){ $scope.overtime = true; $timeout.cancel(mytimeout); }else{ $scope.Timer--; } mytimeout = $timeout($scope.onTimeout,1000); }; var mytimeout = $timeout($scope.onTimeout,1000); $scope.Clear=function(){ $scope.Timer = 5; $timeout.cancel(mytimeout); $scope.overtime = false; mytimeout = $timeout($scope.onTimeout,1000); } } </script> <!-- Sample $timeout --> <div class="box" ng-controller="timeoutCtrl" ng-mouseup="Clear()"> Sample $timeout ----------------------<br> After {{Timer}} secs lock button With no Active<br> <input type="button" ng-disabled="overtime" value ="submit"> </div>
Demo:
Sample $timeout ----------------------
After {{Timer}} secs lock button With no Active
沒有留言:
張貼留言