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;//更新总记录数 } ); }
转载于:https://www.cnblogs.com/lzb0803/p/9054828.html
相关资源:AngularJS Demo