angularJs(五)--指令(一)

ng-repeat指令

  1. ng-repeat指令的作用:
    遍歷集合
    通過in的方式遍歷每一項。類似vue.js中的v-for

        <pre>
            <!DOCTYPE html>
            <html lang="en" ng-app="app">
            <head>
                <meta charset="UTF-8">
                <title>Title</title>
                <script src="js/angular.min.js"></script>
                <script type="text/javascript">
                    var app=angular.module("app",[]);
                    app.controller("Aaa",["$scope","$filter",function($scope,$filter){
                      /*  $scope.dataList=["aa","bb","cc"];*/
                        $scope.originList=[
                            {color:"red",age:"26"},
                            {color:"green",age:"25"},
                            {color:"yellow",age:"16"},
                            {color:"blue",age:"30"}
                        ];
                        $scope.userList=  $scope.originList;
                        $scope.fnSort=function(arg){
                            //在當前函數對象上設置排序方式開關,第一次點擊從大到小,第二次點擊從小到大
                            arguments.callee['fnSort'+arg]=!arguments.callee['fnSort'+arg];
                            $scope.userList=$filter("orderBy")( $scope.originList,arg,arguments.callee['fnSort'+arg]);
                        };
    
                        $scope.fnSearch=function(){
                            $scope.userList= $filter("filter")($scope.originList,$scope.keyword);
                        }
                    }]);
    
                </script>
            </head>
            <body>
                <div ng-controller="Aaa">
                    <input type="text" ng-model="keyword"><input type="button" value="搜索" ng-click="fnSearch()">
                    <table>
                        <tbody>
                            <tr>
                                <th ng-click="fnSort('color')">姓名</th>
                                <th ng-click="fnSort('age')">年齡</th>
                            </tr>
                            <tr ng-repeat="data in userList">
                                <td>{{data.color}}</td>
                                <td>{{data.age}}</td>
                            </tr>
                        </tbody>
                    </table>
                </div>
    
            </body>
            </html>
        </pre>
    
    callee 是 arguments 對象的一個屬性。它可以用於引用該函數的函數體內當前正在執行的函數。這在函數的名稱是未知時很有用,例如在沒有名稱的函數表達式 (也稱爲“匿名函數”)內; 返回正被執行的 Function 對象,也就是所指定的 Function 對象的正文; arguments.length是實參長度,arguments.callee.length是形參長度; 在ES5嚴格模式中,禁止使用arguments.callee:這意味着,你無法在匿名函數內部調用自身了。
        "use strict";
    
    
      var f = function() {
            return arguments.callee;
         };
    
      f(); // 報錯
    
  2. np-repeat指令的擴展

    • $index 每一項索引
    • $first
      <li ng-repeat=" data in dataList">{{$first}}</li>,除了第一項爲true,其餘項爲false。
    • last first相反
    • $middle
      <li ng-repeat=" data in dataList">{{$first}}</li>,除了第一項和最後一項爲false,其餘項爲true。
    • even odd
      <li class="{{$even ? 'acive': 'normal'}}" ng-repeat=" data in dataList">{{data}}</li>,實現隔行變色

    • ng-repeat-start和ng-repeat-end
      當想要重複的html結構不是包含關係,而是兄弟關係,可採用此種輔助方式。

      <pre>
          <div ng-repeat-start=" data in dataList">{{data}}+1</div>
          <p>{{data}}+2</p>
          <div ng-repeat-end>{{data}}+3</div>
      </pre>
      

事件指令

與原生事件相比,支持表達式和數據變量。
- ng-click/dbclick
- ng-mousedown/up
- ng-mousemove/over/out
- ng-keydown/up/press
- ng-focus/blur
- ng-submit
- ng-selected 下拉菜單被選中的時候,觸發此事件
- ng-change 輸入框內的值只要一變化,就會觸發此事件

注意:ng-change必須和ng-model一起使用纔會起作用。

<input type="type" ng-change="bb='hello' ng-model="bb" >{{bb}}
ng-change指令內也可以寫函數。

  • ng-cut/copy/paste
    當我們在輸入框中進行剪切、複製、黏貼操作,就會觸發相應的指令。

input相關指令

  • ng-disabled 可動態設置表單控件的狀態
  • ng-readonly
    readonly與disabled的區別:
    readonly只能用於輸入框(text、textarea),對於按鈕是不起作用的;
    輸入框設置了readonly屬性還是可以提交,但是設置了disabled屬性就不可以。
  • ng-checked 用於checkbox
  • ng-value 針對表單控件的value
    <input type="text" ng-value="val">,效果類似於:<input type="text" value="{{val}}">
    選擇用ng-vaule會更好一些,原因在於:
    當瀏覽器運行時,是先解析html代碼,再執行JS代碼,如果用戶的網速比較慢,那麼瀏覽器解析JS代碼也可能會比較慢,用戶很有可能會看到“{{val}}”這樣的內容,所以會導致用戶體驗性不好,用ng-value就不會出現這個問題。

數據顯示優化處理及插件簡介

  • ng-bind
    爲了解決在html標籤中,直接使用“{{html}}”可能會出現與上文相同的問題,改用ng-bind。
    <div>{{html}}</div>,改用<div ng-bind="html"></div>
    ng-bind只能寫一個表達式。如果想寫多個表達式,可用ng-bind-template指令
  • ng-bind-template
    <div ng-bind-template="{{html}},{{html}}"></div>
  • ng-bind-html
    支持變量的值含有html標籤,即能夠識別html標籤,而ng-bind和ng-bind-template不能,會把html標籤當成普通字符串。
    由於一般都是處理純數據很少有需求是要帶html標籤,ng-bind-html用的比較少,angular就把這一塊單獨提取出來形成插件,而沒有像那些通用的指令存放在angular庫中
    http://www.bootcdn.cn/angular.js/,可以有免費的CDN提供插件下載。

    <pre>
        //解析html的插件
        <script src="js/angular.min.js"></script>
        <script src="https://cdn.bootcss.com/angular.js/1.6.0/angular-sanitize.js"></script>
    
        <script>
            //它既是一個插件也是一個模塊,所以引用它,就需要依賴這個模塊
            var m1=angular.nodule("app",['ngSanitize']);
            m1.controller("Aaa",['$scope',function($scope){
                $scope.text='<h1>hello</h1>';
            }]);
        </script>
        <body>
            <div ng-controller="Aaa">
                <div ng-bind-html="text"></div>
            </div>
        </body>
    </pre>
    

-ng-cloak
用來控制css的一種方式
<div ng-cloak>{{text}}</div>,加上cloak指令後,這個div標籤的display爲none隱藏,當表達式解析完成後,就讓這個div標籤的display爲block顯示出來。
- ng-non-bindable
用來使表達式不被解析。
<div ng-non-bindable>{{text}}</div>,運行結果就是“{{text}}”表達式沒有被解析。

發佈了42 篇原創文章 · 獲贊 28 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章