码迷,mamicode.com
首页 > Web开发 > 详细

转帖:AngularJS中的数据绑定 post

时间:2015-09-07 18:06:27      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

原文作者:zhangzhaoaaa

http://zhangzhaoaaa.iteye.com/blog/2185376 

AngularJS中的数据绑定  


   AngularJS创建实时模板来代替视图,而不是将数据合并进模板之后更新DOM。任何一个独立视图组件中的值都是动态替换的。      ng-app属性声明所有被其包含的内容都属于这个AngularJS应用,这也是我们可以在Web应用中嵌套AngularJS应用的原因。只有被具有ng-app属性的DOM元素包含的元素才会受AngularJS影响。      当AngularJS认为某个值可能发生变化时,它会运行自己的事件循环来检查这个值是否变“脏”。如果该值从上次事件循环运行之后发生了变化,则该值被认为是“脏”值。这也是Angular可以跟踪和响应应用变化的方式。       这个过程被称作脏检查。脏检查是检查数据模型变化的有效手段。当有潜在的变化存在时,AngularJS会在事件循环时执行脏检查来保证数据的一致性。       借助AngularJS,不需要构建复杂和新的JavaScript功能,就可以在视图中实现类自动同步的机制。        我们使用ng-model指令将内部数据模型对象($scope)中的name属性绑定到了文本输入字段上。       数据模型对象是指$scope对象。$scope对象是一个简单的JavaScript对象,其中的属性可以被视图访问,也可以同控制器进行交互。       双向数据绑定意味着如果视图改变了某个值,数据模型会通过脏检查观察到这个变化,而如果数据模型改变了某个值,视图也会一句变化重新渲染。       模块        在AngularJS中,模块是定义应用的最主要的方式。模块包含了主要的应用代码,它允许我们使用angular.module()方法来声明模块,这个方法能够接受两个参数,第一个是模块的名称,第二个是依赖列表,也就是可以被注入到模块中的对象列表。       angular.module(‘myApp‘,[]);         控制器       AngularJS中的控制器是一个函数,用来向视图的作用域中添加额外的功能。我们用它来给作用域对象设置初始状态,并添加自定义行为。       当我们在页面上创建一个新的控制器时,AngularJS会生成并传递一个新的$scope给这个控制器。      AngularJS同其他JavaScript框架最主要的一个区别就是,控制器并不适合用来执行DOM操作、格式化或数据操作,以及除存储数据模型之外的状态维护操作。它只是视图和$scope之间的桥梁。      表达式       用{{}}符号将一个变量绑定到$scope上的写法本质上就是一个表达式:{{expression}}。对表达式进行的任何操作,都会在其所属的作 用域内部执行,因此可以在表达式内部调用那些限制在此作用域内的bianl,并进行循环、函数调用、将变量应用到数学表达式中等操作。      本例子采用技术      页面使用bootstrap布局,页面是bootstrap的模板      前端框架AngularJS      后台使用SpringMVC      整个代码的功能是在输入内容后,提交给后台,后台再返回数据显示到页面,提交时有验证提示。      我在这里列举了三种方式来做这次应用      1.全局作用域的控制器      2.模块划分的控制器      3.将后台请求做成服务抽离出来的控制器     JSP代码: Jsp代码  技术分享

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  

  2.  pageEncoding="UTF-8"%>  

  3. <!DOCTYPE html>  

  4. <html lang="zh-cn" ng-app="MyApp">  

  5. <head>  

  6. <meta charset="utf-8">  

  7. <meta http-equiv="X-UA-Compatible" content="IE=edge">  

  8. <meta name="viewport" content="width=device-width, initial-scale=1">  

  9. <title>接口测试</title>  

  10.   

  11. <!-- Bootstrap -->  

  12. <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet">  

  13.   

  14. </head>  

  15. <body>  

  16.  <div ng-controller="keepController">  

  17.  <form name="testForm" novalidate>  

  18.  <div id="responseMsg" class="testMode" >  

  19.   <div>  

  20.    <h3>认证接口:</h3>  

  21.    <textarea required class="form-control" rows="3" id="authData" name="authData" ng-model="authData"></textarea>  

  22.     <span style="color:red" ng-show="testForm.authData.$dirty && testForm.authData.$invalid">   

  23.          <span ng-show="testForm.authData.$error.required">认证接口必填</span>  

  24.       </span>  

  25.      </div>  

  26.   <div>  

  27.    <h3>数据请求接口:</h3>  

  28.    <textarea required class="form-control" rows="3" id="reqData" name="reqData" ng-model="reqData"></textarea>  

  29.    <span style="color:red" ng-show="testForm.reqData.$dirty && testForm.reqData.$invalid">  

  30.          <span ng-show="testForm.reqData.$error.required">数据请求接口必填</span>  

  31.       </span>  

  32.   </div>  

  33.   <div style="text-align: right;margin-right: 20px;margin-top:10px;">  

  34.    <button class="btn btn-default" role="button" ng-click="keepTest()"  

  35.    ng-disabled="testForm.authData.$invalid ||  

  36.    testForm.reqData.$invalid"  

  37.    >连接测试</button>  

  38.   </div>  

  39.   <div>{{ansInfo}}</div>  

  40.  </div>  

  41.  </form>  

  42.  </div>  

  43.  <script src="js/angularJS/angular.min.js"></script>  

  44.  <script type="text/javascript">  

  45. //1.全局作用域的例子  

  46.   /* function keepController($scope,$http) {  

  47.    $scope.keepTest= function(){  

  48.     var pData = {authData:$scope.authData,reqData:$scope.reqData};  

  49.        $http({method:‘POST‘,url:‘testKeep‘,params:pData}).  

  50.         success(function(response) {  

  51.          $scope.ansInfo = response.a;});  

  52.    };  

  53.   } */  

  54. //2.模块化控制器  

  55.   /*var app = angular.module(‘MyApp‘,[]);  

  56.    app.controller(‘keepController‘,function($scope,$http){  

  57.    $scope.keepTest= function(){  

  58.     var pData = {authData:$scope.authData,reqData:$scope.reqData};  

  59.        $http({method:‘POST‘,url:‘testKeep‘,params:pData}).  

  60.         success(function(response) {  

  61.          $scope.ansInfo=response.a;});  

  62.    }  

  63.   }); */  

  64.  //3.请求服务抽出来的控制器  

  65.   angular.module(‘myapp.services‘,[]).factory(‘testService‘,function($http){  

  66.    var runRequest = function(pData){  

  67.     return $http({method:‘POST‘,url:‘testKeep‘,params:pData});  

  68.    };  

  69.    return {  

  70.     events:function(pData){  

  71.      return runRequest(pData);  

  72.     }  

  73.    };  

  74.   });  

  75.   angular.module(‘MyApp‘,[‘myapp.services‘]).  

  76.    controller(‘keepController‘,function($scope,testService){  

  77.     $scope.keepTest= function(){  

  78.      var pData = {authData:$scope.authData,reqData:$scope.reqData};  

  79.      testService.events(pData).success(function(response){  

  80.       $scope.ansInfo=response.a;  

  81.      });  

  82.     };  

  83.   });  

  84.  </script>  

  85.  <script src="js/jquery.js"></script>  

  86.  <script src="js/bootstrap/bootstrap.min.js"></script>  

  87.    

  88. </body>  

  89. </html>  

 

   JAVA代码: Java代码  技术分享

  1. @RequestMapping(value = "testKeep", produces = "text/plain;charset=UTF-8")  

  2.  @ResponseBody  

  3.  public String testKeep(HttpServletRequest request,  

  4.    HttpServletResponse response) {  

  5.   System.out.println(request.getParameter("authData"));  

  6.   System.out.println(request.getParameter("reqData"));  

  7.   JSONObject ja = new JSONObject();  

  8.   ja.put("a", "aaa");  

  9.   ja.put("b", "bbb");  

  10.   ja.put("c", "ccc");  

  11.   System.out.println("test:"+ja.toString());  

  12.   return ja.toString();  

  13.  } 





转帖:AngularJS中的数据绑定 post

标签:

原文地址:http://my.oschina.net/mellen/blog/502440

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!