欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

angularJs指令详解

程序员文章站 2022-05-11 07:57:22
ng-repeat指令 ng-repeat指令的作用:  遍历集合  通过in的方式遍历每一项。类似vue.js中的v-for    ...

ng-repeat指令

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>

            <p 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>

            </p>

        </body>

        </html>

    </pre>

callee 是 arguments 对象的一个属性。它可以用于引用该函数的函数体内当前正在执行的函数。这在函数的名称是未知时很有用,例如在没有名称的函数表达式 (也称为“匿名函数”)内; 返回正被执行的 function 对象,也就是所指定的 function 对象的正文; arguments.length是实参长度,arguments.callee.length是形参长度; 在es5严格模式中,禁止使用arguments.callee:这意味着,你无法在匿名函数内部调用自身了。

    "use strict";

  var f = function() {

        return arguments.callee;

     };

  f(); // 报错

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 

{{data}}

`,实现隔行变色

ng-repeat-start和ng-repeat-end 

当想要重复的html结构不是包含关系,而是兄弟关系,可采用此种辅助方式。

<pre>

    <p ng-repeat-start=" data in datalist">{{data}}+1</p>

    <p>{{data}}+2</p>

    <p ng-repeat-end>{{data}}+3</p>

</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。 

<p>{{html}}</p>,改用<p ng-bind="html"></p>。 

ng-bind只能写一个表达式。如果想写多个表达式,可用ng-bind-template指令

ng-bind-template 

<p ng-bind-template="{{html}},{{html}}"></p>

ng-bind-html 

支持变量的值含有html标签,即能够识别html标签,而ng-bind和ng-bind-template不能,会把html标签当成普通字符串。 

由于一般都是处理纯数据很少有需求是要带html标签,ng-bind-html用的比较少,angular就把这一块单独提取出来形成插件,而没有像那些通用的指令存放在angular库中 

<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>

        <p ng-controller="aaa">

            <p ng-bind-html="text"></p>

        </p>

    </body>

</pre>

-ng-cloak 

用来控制css的一种方式 

<p ng-cloak>{{text}}</p>,加上cloak指令后,这个p标签的display为none隐藏,当表达式解析完成后,就让这个p标签的display为block显示出来。 

- ng-non-bindable 

用来使表达式不被解析。 

<p ng-non-bindable>{{text}}</p>,运行结果就是“{{text}}”表达式没有被解析。