zoukankan      html  css  js  c++  java
  • AngularJS

     

    AngularJS诞生于2009年,后来被Google公司收购,是一款优秀的前端框架,AngularJS有诸多特性,最为核心的是:MVC、模块化、自动双向数据绑定、依赖注入

     

    MVC:

      AngularJS遵循软件工程的MVC模式并鼓励展现、数据和逻辑组件之间的松耦合,通过依赖注入,AngularJS为客户端的web应用带来了传统服务端服务,例如:独立于视图的控制,因此,后端减少了许多负担,产生了更轻的web应用  

     

    model:数据,起始就是angularJS变量

    view:数据呈现html+Directive(指令)

    Controller:操作数据,就是function,数据的增删查改

     

     

    双向绑定:

      双向的数据绑定允许模型和视图之间的同步

     

     依赖注入:

      模块中的所有service和provider两类对象,都可以根据形参名称实现DI

     

    模块化设计:

      高内聚、低耦合       官方提供的模块、用户自定义模块

     

     JQuery实现同步变换效果

    <body>
    <input type="text" id="name">
    <p>您输入的内容是:<span id="contentSpan"></span></p>
    
    <script type="text/javascript" src="../../js/jquery/jquery-1.11.1.js"></script>
    <script type="text/javascript">
      $(function () {
          $('#name').keyup(function () {
              var name = this.value;
              $('#contentSpan').html(name);
          })
      })
    
    </script>
    </body>

     

    AngularJS:

    <body ng-app>
    <input type="text" ng-model="username">
    <p>您输入的内容是:<span>{{username}}</span></p>
    <script src="../../js/angular-1.2.29/angular.js"></script>
    <script type="text/javascript">
    </script>
    </body>

     

    ng-app指令:告诉angular核心当前标签包含的整个区域由它管理,并且会自动创建$rootScope根作用域对象

    ng-model指令:将当前输入框与谁关联(属性名:属性值),并作为当前作用域($rootScope)的属性

    {{}}:显示数据,从作用域的对象中指定属性上取

    表达式:通常有一个返回值,可以放在任何需要值的地方,比如调用函数,一个变量,一个运算

    语句:通常表示一个完整的执行单位,一段完整的js可执行代码,有的语句也可以用表达式执行,叫做表达式语句

    区别:语句用分号结束,有些语句没有分号,另外:如console.log()虽然没有分号,但是也是语句,因为js引擎会自动在解析的时候加上

     

    当页面输入框中的数据发生改变的时候,angular会将数据更新到域对象的对应属性上

    当域对象的属性数据发生变换的时候,angular会更新其对应的页面显示值

     

    数据绑定:数据从一个地方转移到另一个地方,而且这个操作由框架自动完成

    双向数据绑定:数据可以从View(视图层)流向Model(模型),也可以从Model流向到View

      视图:页面(主要是angular指令和表达式)

      模型:作用域对象(当前为$rootScope),它可以包含一些属性和方法

    当改变view的数据,model对应的属性也会发生变化,

    ng-model指令:数据从view流向到model

    当model属性发生变化时候,页面数据也会随之更新     {{}}:数据从model流向view

    ng-model是双向绑定,而{{}}是单向数据绑定

    ng-init   用来初始化当前作用域对象

    <body ng-app="" ng-init="name='tom'">
    <input type="text" ng-model="name">
    <p>姓名1:{{name}}</p>
    <input type="text" ng-model="name">
    <p>姓名2:{{name}}</p>
    
    <script type="text/javascript" src="../../js/angular-1.2.29/angular.js"></script>
    </body>

     

    作用域对象:

      一个JS对象,ng-app指令默认会创建一个根作用域对象($rootScope),它的属性和方法与页面中的指令或表达式是相关联的

    控制器:

      用于控制AngularJS应用数据的,实例对象

      ng-controller:用于指定构造函数,Angular会自动new此函数创建控制器对象,同时,它还会创建一个新的作用域对象$scope,它是$rootScope的子对象,在控制器中声明#scope形参,angular会自动将$scope传入

    <body ng-app="" ng-init="age=12">
    <div ng-controller="MyController">
      <input type="text" placeholder="姓" ng-model="firstName">
      <input type="text" placeholder="名" ng-model="lastName">
    
      <p>输入的姓名为: {{firstName+'-'+lastName}}</p>
      <p>输入的姓名2为: {{getName()}}</p>
    </div>
    
    <div>
      {{firstName}} <!--不能显示-->
    </div>
    
    <script type="text/javascript" src="../../js/angular-1.2.29/angular.js"></script>
    <script type="text/javascript">
      function MyController ($scope) {//必须是$scope
        // alert(this instanceof MyController);//说明是new调用
        $scope.firstName = 'KB';
        $scope.lastName = 'Brent';
    
        //给域对象指定方法
        $scope.getName = function() {
          return $scope.firstName + "  " + $scope.lastName;
        };
    
        console.log($scope.age);
      }
    </script>
    </body>

     

    依赖对象:

      完成某个特定的功能需要某个对象才能完成,这个对象就是依赖对象

    依赖注入:

      依赖的对象以形参的形式被注入进来,这种方式就是依赖注入,angular的$scope对象就是依赖对象,并且是依赖注入的形式进行使用,形参必须是特定的名称,否则angular是无法注入

    回调函数的event的就是依赖对象,回调函数的形参就是依赖注入

     

     

    声明式和命令式的区别:

    命令式:命令程序执行 的时候每一步都是按照自己的指令,更注重执行的过程

    声明式:更注重执行的结果

     //命令式
        var arr = [1,2,3,4,5];
        var newArr = [];
        for(var i=0;i<arr.length;i++){
          var num = arr[i]*2;
          newArr.push(num);
        }
        console.log(newArr);
    
        //声明式
        var newArr2 = arr.map(function (item) {
          return item*2;
        });
        console.log(newArr2);

     

     

    模块和控制器:

    <body ng-app="MyApp">
    
    <div ng-controller="MyCtrl">
      <input type="text" ng-model="empName">
      <p>员工名:{{empName}}</p>
    </div>
    
    <div ng-controller="MyCtrl1">
      <input type="text" ng-model="empName">
      <p>员工:{{empName}}</p>
    </div>
    
    <script type="text/javascript" src="../../js/angular-1.5.5/angular.js"></script>
    <script type="text/javascript">
        console.log(angular,typeof angular);
        //创建当前应用的模块对象
        var module = angular.module('MyApp',[]);
          module.controller('MyCtrl',function ($scope) {
               $scope.empName = 'Tom';
         });
        module.controller('MyCtrl1',function ($scope) {
           $scope.empName = 'Jack';
       })
    
        //方法链调用
        angular.module('MyApp',[])//模块对象的方法执行完返回的就是模块对象本身
                .controller('MyCtrl',function ($scope) {//$scope写法问题(js代码压缩时会把所有的局部变量压缩成abcd等)
                  $scope.empName = 'Tom';
              }).controller('MyCtrl1',function ($scope) {
                  $scope.empName = 'Jack';
               })
        /*
        上面写法的问题:
            1、形参只能写固定的变量名$scope;
            2、一旦文件压缩,将不能使用,会报错。
         */
        //改进
        angular.module('MyApp',[])
                .controller('MyCtrl',['$scope',function (a) {
                    a.empName = 'tom'
                }])
                .controller('MyCtrl1',['$scope',function (b) {
                    b.empName = 'Jack';
                }])
    </script>
    </body>

     

     

    <html>
    <head>
        <title>入门小Demo-3  初始化</title>
        <script src="angular.min.js"></script>
        <script>
            var app=angular.module('myApp',[]); //定义了一个叫myApp的模块
            //定义控制器
            app.controller('myController',function($scope){
                $scope.add=function(){
                    return parseInt($scope.x)+parseInt($scope.y);
                }
            });
        </script>
    </head>
    <body ng-app="myApp" ng-controller="myController">
    x:<input ng-model="x" >
    y:<input ng-model="y" >
    运算结果:{{add()}}
    </body>
    </html>

    ng-controller用于指定所使用的控制器

    $scope:$scope的使用贯穿于整个AngularJS应用,它与数据模型相关联,同时也是表达式执行的上下文,有了$scope就在视图和控制器之间建立一个通道,基于作用域视图在修改数据时候会立刻更新$scope,同样的$scope发生改变也会重新渲染视图

    事件指令:

    <html>
    <head>
        <title>入门小Demo-5  事件指令</title>
        <script src="angular.min.js"></script>    
        <script>
            var app=angular.module('myApp',[]); //定义了一个叫myApp的模块
            //定义控制器
            app.controller('myController',function($scope){            
                $scope.add=function(){
                    $scope.z= parseInt($scope.x)+parseInt($scope.y);
                }            
            });    
        </script>
    </head>
    <body ng-app="myApp" ng-controller="myController">
    x:<input ng-model="x" >
    y:<input ng-model="y" >
    <button ng-click="add()">运算</button>
    结果:{{z}}
    </body>
    </html>

    ng-click是单击事件指令,点击时候触发控制器的某个方法

    循环数组:

    <html>
    <head>
        <title>入门小Demo-6  循环数据</title>
        <script src="angular.min.js"></script>
        <script>
            var app=angular.module('myApp',[]); //定义了一个叫myApp的模块
            //定义控制器
            app.controller('myController',function($scope){
                $scope.list= [100,192,203,434 ];//定义数组
            });
        </script>
    </head>
    <body ng-app="myApp" ng-controller="myController">
    <table>
    <tr ng-repeat="x in list">
        <td>{{x}}</td>
    </tr>
    </table>
    </body>
    </html>

    ng-repeat指令用于循环数组变量

    循环数组对象:

    <html>
    <head>
        <title>入门小Demo-7  循环对象数组</title>
        <script src="angular.min.js"></script>    
        <script>
            var app=angular.module('myApp',[]); //定义了一个叫myApp的模块
            //定义控制器
            app.controller('myController',function($scope){        
                $scope.list= [
                    {name:'张三',shuxue:100,yuwen:93},
                    {name:'李四',shuxue:88,yuwen:87},
                    {name:'王五',shuxue:77,yuwen:56}
                ];//定义数组            
            });    
        </script>    
    </head>
    <body ng-app="myApp" ng-controller="myController">
    <table>
    <tr>
        <td>姓名</td>
        <td>数学</td>
        <td>语文</td>
    </tr>
    <tr ng-repeat="entity in list">
        <td>{{entity.name}}</td>
        <td>{{entity.shuxue}}</td>
        <td>{{entity.yuwen}}</td>
    </tr>
    </table>
    </body>
    </html>

    内置服务:使用内置服务$http来实现从后端获取数据

    <html>
    <head>
        <title>入门小Demo-8  内置服务</title>
        <meta charset="utf-8" />
        <script src="angular.min.js"></script>    
        <script>
            var app=angular.module('myApp',[]); //定义了一个叫myApp的模块
            //定义控制器
            app.controller('myController',function($scope,$http){        
                $scope.findAll=function(){
                    $http.get('data.json').success(
                        function(response){
                            $scope.list=response;
                        }                    
                    );                
                }            
            });    
        </script>    
    </head>
    <body ng-app="myApp" ng-controller="myController" ng-init="findAll()">
    <table>
    <tr>
        <td>姓名</td>
        <td>数学</td>
        <td>语文</td>
    </tr>
    <tr ng-repeat="entity in list">
        <td>{{entity.name}}</td>
        <td>{{entity.shuxue}}</td>
        <td>{{entity.yuwen}}</td>
    </tr>
    </table>
    </body>
    </html>
    var app=angular.module('xxx',['pagination']);
    app.controller('brandController',function($scope,$http){}

    ng-app指令:用于定义模块的名称

    ng-controller指令:为应用添加控制器

    在控制器中,可以编写代码(函数和变量),并使用$scope对象进行访问

    查询列表:

    //查询品牌列表
                $scope.findAll=function(){
                    $http.get('../brand/findAll.action').success(
                        function(response){
                            $scope.list=response;
                        }        
                    );                
                }
    
    //遍历数据
    <tbody>
                                          <tr ng-repeat="entity in list">
                                              <td><input  type="checkbox" ng-click="updateSelection($event, entity.id)" ></td>                                          
                                              <td>{{entity.id}}</td>
                                              <td>{{entity.name}}</td>                                         
                                              <td>{{entity.firstChar}}</td>                                         
                                              <td class="text-center">                                           
                                                   <button type="button" class="btn bg-olive btn-xs" data-toggle="modal" data-target="#editModal" ng-click="findOne(entity.id)" >修改</button>                                           
                                              </td>
                                          </tr>
                                          
                                      </tbody>

    使用AngularJS自带的分页功能:

    参数配置:

    //分页控件配置currentPage:当前页   totalItems :总记录数  itemsPerPage:每页记录数  perPageOptions :分页选项  onChange:当页码变更后自动触发的方法 
                $scope.paginationConf = {
                    currentPage: 1,
                    totalItems: 10,
                    itemsPerPage: 10,
                    perPageOptions: [5, 10, 15, 20],
                    onChange: function(){
                        $scope.reloadList();
                    }
                };

    页面编写:

     <!--数据列表/-->                        
     <tm-pagination conf="paginationConf"></tm-pagination>

    访问后台代码:

    //刷新列表
                $scope.reloadList=function(){
                    //$scope.findPage( $scope.paginationConf.currentPage ,  $scope.paginationConf.itemsPerPage );
                    $scope.search( $scope.paginationConf.currentPage ,  $scope.paginationConf.itemsPerPage );
                }
                
                //分页 
                $scope.findPage=function(page,size){
                    $http.get('../brand/findPage.action?page='+page +'&size='+size).success(
                        function(response){
                            $scope.list=response.rows;//显示当前页数据
                            $scope.paginationConf.totalItems=response.total;//更新总记录数 
                        }        
                    );                
                }

     

     

     

     

     

     

     

                                    

     

  • 相关阅读:
    WPF and Silverlight 学习笔记:键盘输入、鼠标输入、焦点处理
    [转]Visual Studio .NET "目标平台" 说明
    WPF 使用HwndHost嵌入Win32后,无法接受Mouse_Move\Mouse_Leave消息
    c#有多少种可能导致写文件失败?
    优化性能:文本【msdn】
    解决popup不随着window一起移动的问题
    异常处理的资料
    利用bat编译WPF项目
    属性值继承
    WPF消息机制
  • 原文地址:https://www.cnblogs.com/lzb0803/p/9054828.html
Copyright © 2011-2022 走看看