<html ng-app="mainApp"> 指定angular的做用域是在<html>標籤之內部分; var mainApp= angular.module(mainApp, []);在js文件中調用angular對象的module方法來聲明一個模塊,模塊的名字和ng-app的值對應。就可讓angular運行起來了;php
明白內置的filter的使用,以及如何定義一個filter。css
filter的兩種使用方法:1. 在模板中使用filterhtml
咱們能夠直接在{{}}中使用filter,跟在表達式後面用 | 分割,語法以下:ajax
{{ expression | filter }} express
也能夠多個filter連用,上一個filter的輸出將做爲下一個filter的輸入:json
{{ expression | filter1 | filter2 | ... }} 數組
filter能夠接收參數,參數用 : 進行分割,以下:瀏覽器
{{ expression | filter:argument1:argument2:... }} app
除了對{{}}中的數據進行格式化,咱們還能夠在指令中使用filter,例如先對數組array進行過濾處理,而後再循環輸出:框架
<span ng-repeat="a in array | filter ">
2. 在controller和service中使用filter
js代碼中也可使用過濾器,方式就是咱們熟悉的依賴注入,如我要在controller中使用currency過濾器,只需將它注入到該controller中便可,
代碼以下:
app.controller('test',function($scope,currencyFilter){
$scope.num = currencyFilter(123);
}
在模板中使用{{num}}就能夠直接輸出$123.00了!
在服務中使用filter也是一樣:
要在controller中使用多個filter,並不須要一個一個注入嗎,提供了一個$filter服務能夠來調用所需的filter,你只需注入一個$filter就夠了;
使用方法以下:
app.controller('test',function($scope,$filter){
$scope.num = $filter('currency')(123);
$scope.date = $filter('date')(new Date());
}
自定義過濾器:
filter的自定義方式也很簡單,使用module的filter方法,返回一個函數,該函數接收輸入值,並返回處理後的結果;
例如:返回一個數組中下標爲偶數的元素;
/* Controller js */
mainApp.filter("oushu",function(){
return function(Array){
var array = [];
for(var i=0;i<iArray.length;i++){
if(i%2!==0){
array.push(Array[i]);
}
}
return array;
}
});
13.指令: 指令能夠用來建立自定義的標籤。能夠用來裝飾元素或者操做DOM屬性。能夠做爲標籤、屬性、註釋和類名使用。
模板中可使用的東西有如下四種:
1.指令(directive):angular提供的或者自定義的標籤和屬性,用來加強HTML表現力;
2.標記(markup):即雙大括號{{}},可將數據雙向綁定到HTML中;
3.過濾器(filter):用來格式化輸出數據;
4.表單控制:用來加強表單的驗證功能。
指令的幾種使用方式以下:
做爲標籤:<my-dir></my-dir>
做爲屬性:<span my-dir="exp"></span>
做爲註釋:<!-- directive: my-dir exp -->
做爲類名:<span class="my-dir: exp;"></span>
經常使用的就是做爲標籤和屬性;
樣式相關的指令:
ng-class: 給元素綁定類名;
表達式的返回值能夠是類名字符串,用空格分割多個類名;
類名數組,數組中的每一項都會層疊起來生效;
一個名值對應的json對象,其鍵值爲類名值爲boolean類型,當值爲true時,該類會被加在元素上。
ng-class-odd ng-class-even 用來配合 ng-repeat分別在奇數列和偶數列使用對應的類。這個用來在表格中實現隔行換色再方便不過了。
ng-style:用來綁定元素的css樣式;
ng-show ng-hide: 元素顯隱控制,ng-show和ng-hide的值爲boolean類型的表達式,當值爲true時,對應的show或hide生效;
表單控件功能相關指令:
ng-checked 控制radio和checkbox的選中狀態
ng-selected 控制下拉框的選中狀態
ng-disabled 控制失效狀態
ng-multiple 控制多選
ng-readonly 控制只讀狀態
以上指令的取值均爲boolean類型,當值爲true時相關狀態生效。
上面的這些只是單向綁定,只是從數據到模板,不能副作用於數據。要雙向綁定,仍是要使用 ng-model;
事件綁定相關指令:
ng-click
ng-change
ng-dblclick
ng-mousedown
ng-mouseenter
ng-mouseleave
ng-mousemove
ng-mouseover
ng-mouseup
ng-submit
事件綁定指令的取值爲函數,而且須要加上括號,例如:
<select ng-change=」change($event)」></select>
而後在controller中定義以下:
$scope.change = function($event){
conolse.log($event.target);
}
在模板中能夠用變量$event將事件對象傳遞到controller中;
特殊的指令:
ng-src:angular框架時在DOM內容加載完成以後纔開始發揮做用的,若是模板中存在<img src="{{url}}">,那麼在
頁面開始在加載angular完成以前,頁面會一直顯示一張錯誤的圖片,由於路徑尚未被替換;爲了不這種狀況,
咱們使用ng-src指令,這樣在路徑被正確獲得以前就不會顯示找不到圖片。
ng-href: 同上理,<a>標籤的href屬性也須要換成ng-href,這樣頁面上就不會先出現一個地址錯誤的連接;
咱們在模板中使用{{}}顯示數據時,在angular編譯完成以前頁面會顯示出大括號及裏面的表達式。爲了不這個,ng中有一個與{{}}等同的指令:ng-bind,
一樣用於單向綁定,在頁面剛加載的時候就不會顯示出對用戶無用的數據了。儘管這樣,{{}}那麼好用,還不能用了不成?好消息是咱們依然可使用。由於
編寫的是單頁面應用,頁面只會在加載index.html的時候出這個問題,只需在index.html中的模板中換成ng-bind就行。其餘的模板是咱們動態加載的,
就能夠放心使用{{}}了。
自定義指令: ()
14. 服務:做用就是對外提供某個特定的功能,如消息服務,文件壓縮服務等,是一個獨立的模塊;
系統內置的服務以$開頭,系內置的指令以ng開頭;
定義服務的方式:
使用系統內置的$provide服務;
使用Module的factory方法;
使用Module的service方法。
使用這三種方式來作一個從遠程獲取數據的服務:
1)使用內置的$provide服務;
var mainApp=angular.module("mainApp",[],function($provide){
$provide.factory("getData",function(){
var data=json;
return data;
})
})
2) 使用factory方式:
mainApp.factory("getData",function(){
var data=json;
return data;
})
3)使用service方式:
mainApp.service(getData,function(){
});
Module的service方法,沒有return任何東西,由於service方法自己返回一個構造器,系統會自動使用new關鍵字來建立出一個對象。
因此在構造器函數內可使用this,這樣調用該服務的地方即可以直接經過getData.屬性名 的方式來訪問數據了;
自定義服務,將$http封裝成jq方式的ajax提交方式:
mainApp.factory("ajax",function($http){
return function(config){
if(config.type == "get"){
var param="?";
for(var key in config.data){
param+=key+"="+config.data[key]+"&";
}
$http.get(config.url+param).success(config.success);
}else{
$http.post(config.url,config.data).success(config.success);
}
};
});
使用:
regApp.controller("regconstructor",function($scope,$http,ajax,$location){
ajax({
url:"xxx.php",
type:"get",
data:{
username:$scope.usersname
},
success:function(data){
if(data.mes == "0"){
$scope.nameinfo="用戶名已存在";
$scope.namestyle={color:"red"};
}
}
});
});
15. 依賴注入DI:
例如:mainApp=controller("testDI",function($scope,$loaction){});
這裏咱們只是聲明瞭$scope,$loaction這兩個服務,所需的其餘代碼,框架已經幫咱們注入了;
16. 路由:ajax的一個致命缺點就是會致使瀏覽器後退按鈕失效;
17. 動畫效果:能夠用CSS3或者JS實現,用JS實現須要用到其餘的js庫來支持,由於底層實現仍是靠其餘js庫,angular只是將它封裝好,更容易使用;