当前位置: 移动技术网 > IT编程>开发语言>JavaScript > angularJs指令详解

angularJs指令详解

2019年06月03日  | 移动技术网IT编程  | 我要评论
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}}”表达式没有被解析。


如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网