• AngularJS简单用法


    一、数据绑定

      AngularJS的双向数据绑定,意味着你可以在Mode(JS)中改变数据,而这些变动立刻就会自动出现在View上,反之亦然。即:一方面可以做到model变化驱动了DOM中元素变化,另一方面也可以做到DOM元素的变化也会影响到Model。

      在我们使用jQuery的时候,代码中会大量充斥类似这样的语句:var val = $(‘#id’).val(); $(‘#id’).html(str);等等,即频繁的DOM操作(读取和写入),其实我们的最终目的并不是要操作DOM,而是要实现业务逻辑。ng的绑定将让你摆脱DOM操作,只要模板与数据通过声明进行了绑定,两者将随时保持同步,最新的数据会实时显示在页面中,页面中用户修改的数据也会实时被记录在数据模型中。

      从View到Controller再到View的数据交互(例01):

    <html ng-app="demoApp">
    ……
    <input type="text" ng-model="user.name" placeholder="请输入名称"/>
    Hello, {{ user.name }}!
    ……
    关键: ng-app 、 ng-model 和 { {user.name } } 
    首先: <html>元素的ng-app属性。标识这个DOM里面的内容将启用AngularJS应用。
    其次:告诉AngularJS,对页面上的“user.name” 这个Model进行双向数据绑定。
    第三:告诉AngularJS,在“{{ user.name}}”这个指令模版上显示“user.name”这个Model的数据。
    从Server到Controller再到View的数据交互(例02):
    <html ng-app="demoApp">
    ……
    <div  ng-controller="demoController">
    <input type="text" ng-model="user.name" disabled="disabled"/>
    <a href="javascript:void(0);" ng-click="getAjaxUser()">AJAX获取名字</a>
    ……
    demoApp.controller("demoController", function($http, $scope){
    	$scope. getAjaxUser = function(){
    //		$http.get("../xxx.action").success(function(data){
    //			$scope.user= data;
    //		});
    		$scope.user = {"name":"从JOSN中获取的名称","age":22};
    	};
    });
    

      

      改变$scope中的user,View也会自动更新。

    二、scope:

      $scope是一个把view(一个DOM元素)连结到controller上的对象。在我们的MVC结构里,这个 $scope 将成为model,它提供一个绑定到DOM元素(以及其子元素)上的excecution context。

    尽管听起来有点复杂,但 $scope 实际上就是一个JavaScript对象,controller和view都可以访问它,所以我们可以利用它在两者间传递信息。在这个 $scope 对象里,我们既存储数据,又存储将要运行在view上的函数。

    每一个Angular应用都会有一个 $rootScope。这个 $rootScope 是最顶级的scope,它对应着含有 ng-app 指令属性的那个DOM元素。

    app.run(function($rootScope) { $rootScope.name = "张三"; });

    如果页面上没有明确设定 $scope ,Angular 就会把数据和函数都绑定到这里, 第一部分中的例子就是靠这一点成功运行的。

    这样,我们就可以在view的任何地方访问这个name属性,使用模版表达式{{}},像这样:

                {{ name }}  

    三、module

      在<html>标签上多了一个属性ng-app=”MyApp”,它的作用就是用来指定ng的作用域是在<html>标签以内部分。在js中,我们调用angular对象的module方法来声明一个模块,模块的名字和ng-app的值对应。这样声明一下就可以让ng运行起来了。

      示例:

        <html ng-app="demoApp">

        var demoApp = angular.module('demoApp', []);

    四、ajax

      $http 服务是AngularJS的核心服务之一,它帮助我们通过XMLHttpRequest对象或JSONP与远程HTTP服务进行交流。

      $http 服务是这样一个函数:它接受一个设置对象,其中指定了如何创建HTTP请求;它将返回一个承诺(*参考JavaScript异步编程的promise模式),其中提供两个方法: success方法和error方法。

      

    demoApp.controller("demoController", function($http, $scope){
    	$scope. getAjaxUser = function(){
    		$http.get("../xxx.action").success(function(data){
    			alert(data);
    		}).error(function(){
    			Alert(“出错了!”);
    });
    		
    };
    });
    

      AngularJS的AJAX与jquery等框架的AJAX基本一致。

    五、过滤器

      过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果。主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等。过滤器通常是伴随标记来使用的,将你model中的数据格式化为需要的格式。表单的控制功能主要涉及到数据验证以及表单控件的增强。ng内置了一些过滤器,它们是:

      currency(货币)、date(日期)、filter(子串匹配)、json(格式化json对象)、limitTo(限制个数)、lowercase(小写)、uppercase(大写)、number(数字)、orderBy(排序)。

      过滤器的使用:

      1. 在模板中使用filter

        我们可以直接在{{}}中使用filter,跟在表达式后面用 | 分割,语法如下:

        {{ expression | filter }} 

      2. 在controller和service中使用filter

        我们的js代码中也可以使用过滤器,方式就是我们熟悉的依赖注入,例如我要在controller中使用currency过滤器,只需将它注入到该controller中即可,代码如下:

          app.controller('testC',function($scope,currencyFilter){

              $scope.num = currencyFilter(123534); 

          }  

        在模板中使用{{num}}就可以直接输出$123,534.00了!在服务中使用filter也是同样的道理。

    六、自定义过滤器:

       filter的自定义方式也很简单,使用module的filter方法,返回一个函数,该函数接收输入值,并返回处理后的结果。话不多说,我们来写一个看看。比如我需要一个过滤器,它可以返回一个数组中下标为奇数的元素,代码如下:

    app.filter('odditems',function(){/*odditems是自定义的过滤器的名字,函数为自定义的过滤方式*/
    return function(inputArray){ var array = []; for(var i=0;i<inputArray.length;i++){ if(i%2!==0){ array.push(inputArray[i]); } } return array; } });  

    七、指令:

      ng内置了很多指令用来控制模板,如ng-repeat,ng-class,也有很多指令来帮你完成业务逻辑,如ng-controller,ng-model。因此我们也可以自定义指令:

      指令的几种使用方式如下:

        作为标签:<my-dir></my-dir>

        作为属性:<span my-dir="exp"></span>

        作为注释:<!-- directive: my-dir exp -->

        作为类名:<span class="my-dir: exp;"></span>

      其实常用的就是作为标签和属性。

        1、内置指令 

          1. ng-class

                 ng-class用来给元素绑定类名,其表达式的返回值可以是以下三种:

              类名字符串,可以用空格分割多个类名,如’redtext boldtext’;

              类名数组,数组中的每一项都会层叠起来生效;

              一个名值对应的json对象,其键值为类名,值为boolean类型,当值为true时,该类会被加在元素上。

            下面来看一个使用map的例子:

          ng-class测试  

            红色 加粗 删除线

            <div ng-class=”{redtext:{{red}}, boldtext:{{bold}}, striketext:{{strike}}}” ></div>

            如果你想拼接一个类名出来,可以使用插值表达式,如:

            <div class=”{{style}}text”>字体样式测试</div>

            然后在controller中指定style的值:

            $scope.style = ‘red’;

            注意我用了class而不是ng-class,这是不可以对换的,官方的文档也未做说明,姑且认为这是ng的语法规则吧。

            与ng-class相近的,ng还提供了ng-class-odd、ng-class-even两个指令,用来配合ng-repeat分别在奇数列和偶数列使用对应的类。这个用来在表格中实现隔行换色再方便不过了。

          2. ng-style

            ng-style用来绑定元素的css样式,其表达式的返回值为一个js对象,键为css样式名,值为该样式对应的合法取值。用法比较简单:

             <div ng-style="{color:'red'}">ng-style测试</div>

            <div ng-style="style">ng-style测试</div>

              $scope.style = {color:'red'};  

          3. ng-show,ng-hide

             对于比较常用的元素显隐控制,ng也做了封装,ng-show和ng-hide的值为boolean类型的表达式,当值为true时,对应的show或hide生效。框架会用display:block和display:none来控制元素      的显隐。

          4、自定义指令:

            

    var demoApp.angular.module("demoApp",[]);
    demoApp.directive('userInfo',function(){
    	return {
            restrict : 'E',
            templateUrl : 'userInfoTemplate.html',
            replace : true,
            transclude : true,
            scope : {
                mytitle : '=etitle'
            },
            link : function(scope,element,attris){
                scope.showText = false;
                scope.toggleText = function(){
                    scope.showText = ! scope.showText;
                }
            }
        };
    })  
    

      Restrict为'E':用作标签Restrict为'A':用作样式;replace为true:用模板替换当前标签;transclude为true:将当前元素的内容转移到模板中;scope 为 {mytitle : '=etitle'}:定义一个名为mytitle的MODEL,其值指向当前元素的etitle属性;templateUrl为'userInfoTemplate.html':模板内容为ng-template定义ID为userInfoTemplate.html的内容;link:指定所包含的行为;

  • 相关阅读:
    java微信扫码支付(模式二)
    Python学习08
    学习java第12天
    学习java第11天
    学习java第十天
    学习Java第九天
    学习Java第八天
    学习Java第六天
    学习Java第六天
    学习Java第五天
  • 原文地址:https://www.cnblogs.com/wanb/p/4558530.html
Copyright © 2020-2023  润新知