一、Angular JS 常用指令
ng-app=””
- 项目中不能为空,定义一个Angular JS 应用程序,指定了它的使用范围,一个页面只能有一个ng-app,如果有多个,则第一个有效。ng-app可以出现在html文档的任意一个元素上。
ng-init=”变量=’值’;变量=’值’”
- 初始化变量的值,有多个变量时,中间用分号隔开。
ng-disabled=”布尔值”
- true,禁用;false,可用
- ng-show=”布尔值”
- true,显示;false,隐藏
ng-hide=”布尔值”
true,隐藏;false,显示
- ng-submit=”方法名(参数)”
- 提交
ng-switch=”变量”
- 类似于switch-case
示例:
- 类似于switch-case
<div ng-switch="myVar">
<div ng-switch-when="dogs">
<h1>Dogs</h1>
<p>Welcome to a world of dogs.</p>
</div>
<div ng-switch-when="tuts">
<h1>Tutorials</h1>
<p>Learn from examples.</p>
</div>
<div ng-switch-when="cars">
<h1>Cars</h1>
<p>Read about cars.</p>
</div>
</div>
- ng-if=
"$odd"
//表格,$odd,奇数行;$even,偶数行;$index,表格序号
示例:
<table>
<tr style="{{$even?'background-color: #f1f1f1':''}}" ng-repeat="x in names">
<td>{{ $index + 1 }}</td>
<td>{{ x.Name }}</td>
<td>{{ x.Country }}</td>
</tr>
</table>
- ng-model=”变量”
- 定义变量名,一个页面中可以有多个。将元素值(比如输入域的值)绑定到应用程序。合法),
$dirty(值改变),$touched(是否通过触屏点击),$error(验证用户输入),$valid(字段内容合法),$invalid(字段内容非法)
示例:
- 定义变量名,一个页面中可以有多个。将元素值(比如输入域的值)绑定到应用程序。合法),
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>
<form ng-app="" name="myForm" ng-init="myText = '[email protected]'">
Email:
<input type="email" name="myAddress" ng-model="myText" required>
<p>编辑邮箱地址,查看状态的改变。</p>
<h1>状态</h1>
<p>Valid: {{myForm.myAddress.$valid}} (如果输入的值是合法的则为 true)。</p>
<p>Dirty: {{myForm.myAddress.$dirty}} (如果值改变则为 true)。</p>
<p>Touched: {{myForm.myAddress.$touched}} (如果通过触屏点击则为 true)。</p>
<p>Error: {{myForm.myAddress.$error.email}}(不是一个合法的邮箱地址则为true)</p>
</form>
</body>
</html>
- ng-bind=”变量”
- 绑定变量名,获取该变量的数据。这里的变量就是ng-model的变量名。但是一般都用双重花括号来获取变量的值,比如:{{变量}}与HTML属性ng-bind=”变量”效果一样。将应用程序视图绑定到html视图。
- 当ng-bind和{{}}同时使用时,ng-bind绑定的值覆盖该元素的内容。
示例:
<div ng-app="" ng-init="firstName='John'">
//<p>姓名为 <span>{{firstName}}</span></p>
<p>姓名为 <span ng-bind="firstName"></span></p>
ng-directives,自定义指令
- 使用.directive函数来添加自定义的指令,自定义的指令可以通过元素名、属性、类名、注释 四种方式来调用指令。示例:
(1)<runoob-directive></runoob-directive> (2)<div runoob-directive></div> (3)<div class="runoob-directive"></div> (4)<!-- directive:runoob-directive -->
- 使用.directive函数来添加自定义的指令,自定义的指令可以通过元素名、属性、类名、注释 四种方式来调用指令。示例:
ng-options
- 使用ng-options创建选择框,
示例:
- 使用ng-options创建选择框,
<div ng-app="myApp" ng-controller="myCtrl">
<select ng-init="selectedName = names[0]" ng-model="selectedName" ng-options="x for x in names">
<!-- ng-options选择的是对象,可以获取更多的信息 -->
</select>
<select>
<option ng-repeat="x in names">{{x}}</option>
<!-- ng-repeat选择的是字符串 -->
</select>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.names = ["Google", "Runoob", "Taobao"];
});
</script>
- ng-repeat
- 使用ng-repeat重复HTML元素
示例:
- 使用ng-repeat重复HTML元素
<div ng-app="" ng-init="names=[
{name:'Jani',country:'Norway'},
{name:'Hege',country:'Sweden'},
{name:'Kai',country:'Denmark'}]">
<p>循环对象:</p>
<ul>
<li ng-repeat="x in names">
{{ x.name + ', ' + x.country }}
</li>
</ul>
</div>
ng-controller
- 定义了控制器。一个ng-app中可以有多个ng-controller。如果把ng-app比做一层楼,例如ng-app=”3F”,则 ng-controller相当于ng-controller=”3F-0001”,ng-controller=”3F-0002”。(在大型的应用程序中,通常把控制器存储在外部文件中。)
- 参数 :
$scope
,作用域,类似于局部作用域,一个controller对应一个$scope - 参数:
$rootScope
,根作用域,类似于全局变量,在一个ng-app类有效,存在多个rootScope时,最后一个 rootScope有效。 - 参数:
$location
,对应window.location,可以返回当前页面的URL地址。 - 参数:
$http
,用于读取web服务器上数据的服务。 - 参数:
$timeout(function(){}(函数),2000(时间))
,延迟,两秒后显示信息。可用于设置单次或多次延时服务。 - 参数:
$interval(function(){}(函数),1000(时间))
,计时器,每一秒显示信息。可用于设置始终运行的延时服务。 - 服务:
$watch,$scope.$watch('firstName',function(){})//监听firstName的变化,更新fullName
,监听器。 - 服务:
$apply,$scope.$apply(function(){});setInterval($scope.setTime,1000);//$apply 方法可以修改数据
自定义参数(服务):
app.service('hexafy',function(){this.myFunc = function(x){return x.toString(16);}}); app.controller('myCtrl',function($scope,hexafy){$scope.hex = hexafy.myFunc(255);})
示例:
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<meta charset="utf-8">
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>
<p>尝试修改以下表单。</p>
<div ng-controller="myCtrl">
名: <input type="text" ng-model="firstName"><br>
姓: <input type="text" ng-model="lastName"><br>
<br>
姓名: {{firstName + " " + lastName}}
</div>
<div ng-controller="myCtrl2">
名: <input type="text" ng-model="firstName"><br>
姓: <input type="text" ng-model="lastName"><br>
<br>
姓名: {{firstName + " " + lastName}}
</div>
<script>
var app = angular.module('myApp',[]);
app.controller('myCtrl',function($scope){
$scope.firstName="Tome";
$scope.lastName="Li";
});
app.controller('myCtrl2',function($scope){
$scope.firstName="Ming";
$scope.lastName="Li";
});
//$http用法1
app.controller('myCtrl', 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) {
// 请求失败执行代码
});
});
//$http 用法2
//$http.get('/someUrl', config).then(successCallback, errorCallback);
//$http.post('/someUrl', data, config).then(successCallback, errorCallback);
app.controller('myCtrl', function($scope, $http) {
$http.get("http://www.runoob.com/try/angularjs/data/sites.php")
.then(function (response) {$scope.names = response.data.sites;});
});
</script>
</body>
</html>
ng-show
- 显示,true,隐藏,false
ng-click
- 点击事件
ng-include
- 包含HTML文件和AngularJS代码。
- 跨域包含需要设置域名访问白名单。
ng-class
- ng-view
- 视图
- ng-enter
- ng-leave
示例:
<body ng-app="myApp">
<div ng-include="'http://c.runoob.com/runoobtest/angular_include.php'"></div>
<script>
var app = angular.module('myApp', [])
app.config(function($sceDelegateProvider) {
$sceDelegateProvider.resourceUrlWhitelist([//跨域设置白名单
'http://c.runoob.com/runoobtest/**'
]);
});
</script>
</body>
二、Angular JS 使用方式
指令: ng-app,ng-model等以ng开头的HTML属性
表达式:{{expression}}
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>
<div ng-app="">
<p>名字 : <input type="text" ng-model="name"></p>
<h1>Hello {{name}}</h1>
</div>
</body>
</html>
过滤器:
- 使用方式:将一个管道字符(|)和一个过滤器添加到表达式中。
- 过滤器的类型有currency(格式化数字为货币格式)、filter(过滤,相当于查询)、lowercase、orderBy、uppercase。
- 示例
<div ng-app="myApp" ng-controller="namesCtrl">
<p><input type="text" ng-model="test"></p>
<ul>
<li ng-repeat="x in names | filter:test | orderBy:'country'">
{{ (x.name | uppercase) + ', ' + x.country }}
</li>
</ul>
</div>
举例:
1、大小写转换
{{ "lower cap string" | uppercase }} // 结果:LOWER CAP STRING
{{ "TANK is GOOD" | lowercase }} // 结果:tank is good
2、date格式化
{{1490161945000 | date:"yyyy-MM-dd HH:mm:ss"}} // 2017-03-22 13:52:25
3、number 格式化(保留小数)
{{149016.1945000 | number:2}}
4、currency货币格式化
{{ 250 | currency }} // 结果:$250.00
{{ 250 | currency:"RMB ¥ " }} // 结果:RMB ¥ 250.00
5、filter查找
// 查找name为iphone的行
{{ [{"age": 20,"id": 10,"name": "iphone"},
{"age": 12,"id": 11,"name": "sunm xing"},
{"age": 44,"id": 12,"name": "test abc"}
] | filter:{'name':'iphone'} }}
6、limitTo 截取
{{"1234567890" | limitTo :6}} // 从前面开始截取6位
{{"1234567890" | limitTo:-4}} // 从后面开始截取4位
7、orderBy排序
// 根id降序排
{{ [{"age": 20,"id": 10,"name": "iphone"},
{"age": 12,"id": 11,"name": "sunm xing"},
{"age": 44,"id": 12,"name": "test abc"}
] | orderBy:'id':true }} 或者 |orderBy:'-id'
// 根据id升序排
{{ [{"age": 20,"id": 10,"name": "iphone"},
{"age": 12,"id": 11,"name": "sunm xing"},
{"age": 44,"id": 12,"name": "test abc"}
] | orderBy:'id' }}
- 自定义过滤器–多参数
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.msg = "Runoob";
});
app.filter('reverse', function() { //可以注入依赖
return function(text) {
return text.split("").reverse().join("");
}
});
全局API
- angular.lowercase();字符串转小写
- angular.uppercase();字符串转大写
- angular.isString();判断给定的对象是否为字符串,是(true),否(false)
- angular.isNumber();判断给定的对象是否数字,是(true),否(false)
动画
AngularJS 使用动画需要引入 angular-animate.min.js 库
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular-animate.min.js"></script>
还需在应用中使用模型 ngAnimate
<body ng-app="ngAnimate">
依赖注入
有以下五个方法:value,factory,service,provider,constant。
示例:
// 定义一个模块
var mainApp = angular.module("mainApp", []);
// 创建 factory "MathService" 用于两数的乘积 provides a method multiply to return multiplication of two numbers
mainApp.factory('MathService', function() {
var factory = {};
factory.multiply = function(a, b) {
return a * b
}
return factory;
});
// 在 service 中注入 factory "MathService"
mainApp.service('CalcService', function(MathService){
this.square = function(a) {
return MathService.multiply(a,a);
}
});
...
路由器:
通常我们的URL形式为 http://runoob.com/first/page,但在单页Web应用中 AngularJS 通过 # + 标记 实现,例如:http://runoob.com/#/first
,AngularJS 路由 就通过 # + 标记 帮助我们区分不同的逻辑页面并将不同的页面绑定到对应的控制器上。
示例:
<html>
<head>
<meta charset="utf-8">
<title>AngularJS 路由实例 - 菜鸟教程</title>
</head>
<body ng-app='routingDemoApp'>
<h2>AngularJS 路由应用</h2>
<ul>
<li><a href="#/">首页</a></li>
<li><a href="#/computers">电脑</a></li>
<li><a href="#/printers">打印机</a></li>
<li><a href="#/blabla">其他</a></li>
</ul>
<div ng-view></div>
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
<script src="http://apps.bdimg.com/libs/angular-route/1.3.13/angular-route.js"></script>
<script>
angular.module('routingDemoApp',['ngRoute'])
.config(['$routeProvider', function($routeProvider){
$routeProvider
.when('/',{template:'这是首页页面'})
.when('/computers',{template:'这是电脑分类页面'})
.when('/printers',{template:'这是打印机页面'})
.otherwise({redirectTo:'/'});
}]);
</script>
</body>
</html>