AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优 秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心 的是:MVC、模块化、自动化双向数据绑定、依赖注入等等。
双向绑定(同变量值同步变化):
<html> <head> <title> 入门小 Demo-1</title> <script src="angular.min.js"></script> </head> <!-- ng-init 初始化 --> <body ng-app ng-init="myname=' 蔡徐坤 '"> <!-- {{}}变量表达式调用 --> {{100+100}} <!-- ng-model 变量绑定 双向绑定 即下面同变量名数值都一样 --> 请输入你的姓名:<input ng-model="myname"> <input ng-model="myname"> <br> {{myname}}, 你好 </body> </html>
控制器 controller 与事件:
<html> <head> <title> 控制器 </title> <script src="angular.min.js"></script> <script> var app = angular.module('myApp', []); // 定义了一个名叫 myApp 的模块 []写引入其他模块的名字 // 定义控制器 $scope 作用域 控制层与视图层的数据桥梁 app.controller('myController', function($scope) {$scope.add = function() { // 获取视图层的变量 转换成 int 否则 + 会作为拼接字符串连接符 return parseInt($scope.x) + parseInt($scope.y); } }); </script> </head> <!-- body 绑定模块与控制器 --> <body ng-app="myApp" ng-controller="myController"> x:<input ng-model="x"> y:<input ng-model="y"> 运算结果:{{add()}} </body> </html>
ng-click 事件与 ng-repeat 循环数组与对象数组:
<html> <head> <title> 事件指令 </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); } $scope.list = [100, 200, 300]; // 定义数组 /* 循环对象定义 */ $scope.alist = [{ name: ' 张三 ', shuxue: 100 }, { name: ' 李四 ', shuxue: 88 }]; // 定义数组 }); </script> </head> <body ng-app="myApp" ng-controller="myController"> x:<input ng-model="x"> y:<input ng-model="y"> <!-- ng-click 单击事件 --> <button ng-click="add()"> 计算 </button> 结果:{{z}} <!-- 循环数组 ng-repeat = 变量 in 数组 --> <table> <tr ng-repeat="a in list"> <td>{{a}}</td> </tr> </table> <!-- 循环对象 类似 Java 中用点调用对象属性 --> <table> <tr ng-repeat="a in alist"> <td>{{a.name}}</td><td>{{a.shuxue}}</td> </tr> </table> </body> </html>
$http 内置服务:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> 内置服务 </title> <meta charset="utf-8" /> <script src="angular.min.js"></script> <script> var app = angular.module('myApp', []); // 定义了一个叫 myApp 的模块 // 内置服务 $http 需要再方法中注入 app.controller('myController', function($scope, $http) {$scope.findAll = function() { // get/post 请求 $http.post('data.json').success(function(response) {$scope.list = response;} ); } // 由于 body 调用了该 controller 因此必定会调用下行方法而执行上述代码 但放 init 中就不必担心别的页面每次调用也会执行 // $scope.findAll();}); </script> </head> <!-- ng-init 除了给变量初始化 也可以调用方法 --> <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>
测试的 json 数据 data.json:
[{"name":" 张三 ","shuxue":100,"yuwen":93}, {"name":" 李四 ","shuxue":88,"yuwen":87}, {"name":" 王五 ","shuxue":77,"yuwen":56}, {"name":" 赵六 ","shuxue":67,"yuwen":86} ]
总结:
var app = angular.module('myApp', []) // 在 js 中定义模块 app.controller('myController', function($scope) {} // 给模块创建名为 myController 的控制器 $scope // 前端与控制层数据的桥梁 ng-app="myApp" // 在 body 标签里绑定模块 将 body 交给 angular 管理 ng-init="findAll() // 初始化变量或者在载入时调用方法 可见第一个 demo ng-controller="myController" // 定义控制器 {{}} // 调用变量或者运算式 <input ng-model="x"> // 为标签绑定变量 ng-click // 单击事件 a in list //in 作为 list 遍历 a.name // 点调用对象属性 $http.post('data.json').success(function(response){return response}) //http 服务发送请求
MVC 模式
首先在 base.js 中创建模块,这里命名为 app
var app=angular.module('tieba',['pagination']); //[] 内为引入的模块 不需要可留空
在服务 js 中写 service:
app.service('tiebaService',function($http){ // 读取列表数据绑定到表单中 this.findAll=function(){ return $http.get('../tieba/findAll.do'); } });
在控制层 js 中写 controller:
// 控制层 app.controller('tiebaController' ,function($scope,$controller ,tiebaService){ // 引用 service 跟内置服务 $controller('baseController',{$scope:$scope});// 继承 baseController // 读取列表数据绑定到表单中 $scope.findAll=function(){ tiebaService.findAll().success( function(response){ $scope.list=response; } ); } });