初学AngularJS
简 介
HaHaHa
AngularJS 是一个 JavaScript 框架。它可通过 <script> 标签添加到 HTML 页面。
AngularJS 通过 指令 扩展了 HTML,且通过 表达式 绑定数据到 HTML。
AngularJS常用指令 |
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>AngularJS入门</title> </head> <body ng-app="" ng-init="name=123"> <input type="text" id="input" ng-model="name"/> <div id="div" ng-bind="name+',Angular'">{{name}}</div> <input type="text" id="input2" ng-model="name"/> <p>我的第一个表达式: {{ 5 +""+ 5 + ',Angular'}}</p> </body> <script src="libs/jquery-3.1.1.js"></script> <script src="libs/angular.js"></script> <script type="text/javascript"> </script> </html>
2 MVC三层构架 |
1、Model(模型):应用程序中用于处理数据的部分。(保存或修改数据到数据库、变量等)。AngularJS中的Model特指的是:数据
View(视图):用户看到的用于显示数据的页面;
Controller(控制器):应用程序中处理用户交互的部分。负责从视图读取数据,控制用户输入,并向模型发送数据。
2、工作原理: 用户从视图层发出请求,controller接收到请求后转发给对应的model处理,model处理完成后返回结果给controller,并在view层反馈给用户。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body ng-app="myApp" > <div ng-controller="myCtrl"> <input type="text" ng-model="name"/> <div ng-bind="name"></div> <div ng-bind="classes.name"></div> </div> <div ng-controller="myCtrl1"> <div ng-bind="age"></div> <div ng-bind="name"></div> </div> <div ng-bind="age"></div> <div ng-bind="name"></div> </body> <script src="libs/angular.js"></script> <script type="text/javascript"> app.controller("myCtrl",function($scope,$rootScope){ //$scope.name = "jianghao"; $rootScope.age = 14; $scope.classes = { name:"H51701", num:"33" }; }); app.controller("myCtrl1",function(){ }); </script> </html>
3 过滤器 |
AngularJS中,过滤器可以使用一个管道字符(|)添加到表达式和指令中。
>>> 系统内置过滤器:
currency格式化数字为货币格式。
filter从数组项中选择一个子集。
lowercase格式化字符串为小写。
orderBy根据某个表达式排列数组。
uppercase格式化字符串为大写。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="libs/bootstrap.css" /> </head> <body ng-app="app" ng-controller="ctrl"> <p>{{"aBcDeF"|uppercase}}</p> <p>{{"aBcDeF"|lowercase}}</p> <p>{{123456|currency}}</p> <form class="form-horizontal"> </form> <div class="form-group"> <label>请输入筛选信息:</label> <input type="text" ng-model="search" /> </div> <table class="table table-bordered"> <thead> <tr> <th>姓名</th> <th>年龄</th> <th>成绩</th> </tr> </thead> <tr ng-repeat="item in classes| filter:search | orderBy:'score'"> <td>{{item.name}}</td> <td>{{item.age}}</td> <td>{{item.score}}</td> </tr> </table> <p>{{"123456"|reverse}}</p> </body> <script src="libs/angular.js"></script> <script> angular.module("app",[]) .controller("ctrl",function($scope){ $scope.classes = [ {name:"张二",age:"12",score:"88"}, {name:"张三",age:"12",score:"88"}, {name:"李四",age:"15",score:"78"}, {name:"李五",age:"15",score:"78"}, {name:"王大麻子",age:"18",score:"98"}, {name:"王二麻子",age:"18",score:"98"} ]; }) /* * 自定义过滤器 */ .filter('reverse', function() { return function(text) { if(!angular.isString(text)){ return "您输入的内容不是字符串"; }else{ return text.split("").reverse().join(""); } } }) </script> </html>
4 服务 |
【自定义服务provide】
1、在AngularJS中,Service,factory都是基于provider实现的。
2、在provider中,通过$get()方法提供了factory的写法,用于返回 value/service/factory。;
3、provider是三种自定义服务中,唯一可以写进config配置阶段的一种。
如果服务,必须要在配置阶段执行,那么必须使用provider。否则,一般使用Service或factory
【自定义服务factory】
factory 是一个函数用于返回值,通常我们使用 factory 函数来计算或返回值。(factory使用上,与service差距不大)
【服务Service】
1、内置服务:
>>> 使用内置服务,必须在Controller中通过函数的参数注入进来!!!!!
$location:返回当前页面的 URL地址。
$http:向服务器发送请求,应用响应服务器传送过来的数据,类似于Ajax
$timeout:相当于setTimeout();
$interval:相当于setInterval();
5 $http |
$http 是 AngularJS 中的一个核心服务,用于读取远程服务器的数据。
AngularJS $http 是一个用于读取web服务器上数据的服务。
$http.get(url) 是用于读取服务器数据的函数。
var app = angular.module('myApp', []);
app.controller('siteCtrl', function($scope, $http) {
$http({
method: 'GET',
url: 'https://www.runoob.com/try/angularjs/data/sites.php'
}).then(function successCallback(response) {
$scope.names = response.data.sites;
}, function errorCallback(response) {
// 请求失败执行代码
});
});
6 select与表格 |
使用数组作为数据源。
其中,x表示数组的每一项。
默认会将x直接绑定到option的value中。
而option显示的内容,有前面的x for... 决定
使用对象作为数据源.
其中,(x,y)表示键值对,x为键,y为值。
默认会将值y绑定到option的value中.
而option显示的内容,有前面的x for... 决定
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="libs/bootstrap.css" /> <style type="text/css"> *{ margin: 10px; } </style> </head> <body ng-app="app" ng-controller="ctrl"> <!--<select ng-model="name"> <option ng-repeat="item in options" >{{item}}</option> </select>--> <!--<select ng-model="name"> <option ng-repeat="item in sites" value="{{item.url}}">{{item.site}}</option> </select>--> <select ng-model="name" ng-options="x for (x, y) in sites"> </select> <div class="alert alert-info" style="width: 300px;"> 您选择的是:{{name}} </div> <table class="table table-bordered"> <tr> <th>序号</th> <th>姓名</th> </tr> <tr ng-repeat="item in options"> <td>{{$index +1}}</td><!--$index 表示遍历的索引,从0开始--> <td>{{item}}</td> </tr> </table> </body> <script src="libs/angular.js"></script> <script> /* * */ angular.module("app",[]) .controller("ctrl",function($scope){ $scope.options = ["张三","李四","王二麻子","杰小瑞"]; // $scope.sites = [ // {site : "Google", url : "http://www.google.com"}, // {site : "Runoob", url : "http://www.runoob.com"}, // {site : "Taobao", url : "http://www.taobao.com"} // ]; $scope.sites = { site01 : "Google", site02 : "Runoob", site03 : "Taobao" }; }) </script> </html>
7 输入验证 |
[AngularJS中的表单验证]
1、表单中,常用的验证操作:
$dirty 表单有填写记录
$valid 字段内容合法的
$invalid 字段内容是非法的
$pristine 表单没有填写记录
$error 表单验证不通过的错误信息
2、验证时,需给表单,及需要验证的input,设置name属性:
给form及input设置name后,会将form表单信息,默认绑定到$scope作用域中。故,可以使用 formName.inputName.$验证操作 得到验证结果:
例如:formName.inputName.$dirty = "true" 表单被填写过
formName.inputName.$invalid = "true" 表单输入不合法
formName.inputName.$error.required = "true" 表单必填但未填
$error支持的验证有:required/minlength/maxlength/pattern/email/number/date/url等。。。
3、为避免冲突,例如使用type="email"时,H5也会进行验证操作。如果只想使用AngularJS验证,可以使用<form novalidate></form>属性,禁用H5自带验证功能;
<!DOCTYPE html> <html> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> <body> <h2>Validation Example</h2> <form ng-app="myApp" ng-controller="validateCtrl" name="myForm" novalidate> <p>用户名:<br> <input type="text" name="user" ng-model="user" required> <span style="color:red" ng-show="myForm.user.$dirty && myForm.user.$invalid"> <span ng-show="myForm.user.$error.required">用户名是必须的。</span> </span> </p> <p>邮箱:<br> <input type="email" name="email" ng-model="email" required> <span style="color:red" ng-show="myForm.email.$dirty && myForm.email.$invalid"> <span ng-show="myForm.email.$error.required">邮箱是必须的。</span> <span ng-show="myForm.email.$error.email">非法的邮箱。</span> </span> </p> <p> <input type="submit" ng-disabled="myForm.user.$dirty && myForm.user.$invalid || myForm.email.$dirty && myForm.email.$invalid"> </p> </form> <script> var app = angular.module('myApp', []); app.controller('validateCtrl', function($scope) { $scope.user = 'John Doe'; $scope.email = 'john.doe@gmail.com'; }); </script> </body> </html>