AngularJScss
被Google收購了,而且應用到Google的不少產品中html
Google有一個產品,寫了17000多行代碼,使用AngularJS改版以後,代碼1500行代碼html5
應用場景:angularjs
AngularJS 第一大特性採用MVC模式設計:使數據分離更加便於維護與修改。json
M(model): 模型-用來處理數據;後端
V(view): 視圖-用來顯示數據;跨域
C(controller): 控制器-用來分配數據給視圖顯示(調度做用);數組
代碼示例:緩存
<!DOCTYPE html><html ng-app><head><script src="JS/angular.min.js"></script><script> function ng1($scope,$rootScope){ // 局部範圍變量$scope.name = "梁"; // 全局範圍變量 $rootScope.age = 20;}function ng2(){}</script>服務器
</head>
<body>
<div ng-controller="ng1"> {{name}} {{age}} </div>
<div ng-controller="ng2">{{age}}</div>
</body>
</html>
注意點:
* ng-app 指令:在哪裏注入就說明從哪裏開始用angular解析。
* ng-controller 指令:指定該區域使用哪一個控制器來解析。
* $scope 局部範圍變量:定義的變量只能在該函數內部使用。
* $rootScope 全局範圍變量:定義的變量能夠在所有範圍中使用。
*{{變量名}} 在視圖層中用 { { } } 符號來解析變量內的數據。
AngularJS 第二大特性採用MVVM模式設計:使模型與視圖層相互關聯,更加方便使用。
模型變化視圖也跟着變化,視圖變化模型也跟着變化。
代碼示例:
<!DOCTYPE html>
<html ng-app >
<head>
<script src="JS/angular.min.js"></script>
<script>
// 文字兩秒後變換
function ng1($scope,$timeout){
$scope.name="李";
$timeout(function(){
$scope.name="王";
},2000);
}
</script>
</head>
<body>
<div ng-controller="ng1"> {{name}}</div>
</body>
</html>
AngularJS 第三大特性分模塊化處理:減小全局變量的污染(減小變量的衝突); 減小模塊與模塊之間的依賴(模塊1出錯了,不影響模塊2); seaJS saas模塊化處理的框架
實現:
代碼示例:
<html ng-app=」app」>
var ng = angular.module('app',[]); // 定義模塊
// 綁定控制器
ng.controller('a',['$scope',function($scope){ // 代碼壓縮問題解決
$scope.name = 'angular1';
}]);
ng.controller('b',['$scope',function($scope){
$scope.name = 'angular2';
}]);
ng.controller('c',['$scope',function($scope){
$scope.name = 'angular3';
}]);
<div ng-controller="a"><p>{{name}}</p></div>
<div ng-controller="b"><p>{{name}}</p></div>
<div ng-controller="c"><p>{{name}}</p></div>
注意點:
* 代碼壓縮:項目完成後代碼壓縮會將形參壓縮致使不能用,解決方法:在綁定控制器時第二個參數設置爲數組,第一個元素爲真是的做用域,第二個元素函數的參數對應前面真是的做用域。
AngularJS 過濾器的使用:更加方便的進行數據轉換及數據排列。
AngularJS 過濾器拓展:
是模塊下面的方法: 模塊名.filter();
操做步驟:
1. 調用模塊裏面的 filter() 方法 返回一個函數 其中參數 str 表明定義的變量的值
2. 在模型中定義變量
3. 在視圖中調用自定義的過濾器顯示輸出
ng-repeat 至關於for(var i in arr){} 在控制器中寫數據 使用ng-repeat指令循環到視圖當中。
結合ng-repeat指令與過濾器實現排序與模糊搜索
屬性:
1. $index: 返回數據的索引 從0開始;
2. $first: 返回布爾值 索引在第一個的爲true,其餘都是false;
3. $last: 返回布爾值 索引在最後一個的爲true,其餘都是false;
4. $middle: 返回布爾值 索引在中間的爲true,其餘都是false;
5. $even: 返回布爾值 索引在偶數位置的爲true,其餘都是false;
6. $odd: 返回布爾值 索引在基數位置的爲true,其餘都是false。
實例: 經過在class裏面判斷偶數進行各行換色。
自定義循環的開始和結束:
ng-repeat-start ng-repeat-end 在開始和結束中循環一個總體。
事件指令:
* 紅色標記指令爲angularJS新增事件指令。
實例:
複選框被選中相應的下拉列表也被選中。
複製
input指令:
實例:
按鈕5秒後被釋放。
www.bootcdn.cn/angular.js/1.4.0/ 加速器cdn地址
ng-bind指令:
在頁面有alert() 彈出框時 在點擊彈出框肯定前若是未使用 ng-bind相關指令,會將{{....}}顯示出來,解決此問題的辦法就是在視圖當中使用 ng-bind 相關指令:
1. ng-bind=「變量名」 只能輸出一個變量 ;
2. ng-bind-template= 「 {{變量名}} {{變量名}} {{變量名}} 」 能輸出多個變量,變量名 外要加 {{}} 符號 ;
3. ng-bind-html= 「變量名」 變量名外不須要加{{}} 符號,輸出數據中帶有html標籤的數據(注意點:angularJS 將不經常使用的方法寫在框架外部,以便使框架更加輕便,要想使用外部方法首先要在模塊中加載此方法纔可使用,ng-bind-html 指令就是被加載到外部的方法);
4. ng-non-bindable 將變量名原封不動輸出將{{}}符號同時輸出
CSS樣式相關的指令:
DOM操做相關的指令:
用法: on 是條件
指令擴展:
用法:在循環中套循環中將索引循環出來使用,不能用</p> 標籤循環。
2. ng-include 加載模板;
用法:加載外部模板,注意點:(1)必須在服務器環境下加載,(2)必須在引號中在加引號變成字符串否則會被理解成變量。
3. ng-model 模型賦值;
ng-model擴展: ng-model-options updateOn: 「監控的事件名稱」;
用法: 在輸入框輸完文字失去光標後下面顯示出文字來。
4. ng-controller 綁定控制器;
ng-controller擴展:as面向對象用法:
自定義指令:
與自定義過濾器同樣,都是模塊裏面的方法,第一個參數是指令名稱,第二個參數是一個函數方法,返回一個對象格式。
格式:
AngularJS中的服務就是用來處理數據的,至關與MVC中的M(模型)的角色。
1. 學習AngularJS內置的一些服務。
$timeout
$interval 等
要想使用這些服務,第一步須要先注入到控制器裏面
2. 自定義服務。
$http服務:
$http異步請求服務 get / post / jsonp
jsonp注意事項:
還有一種更省事的方法:在服務端不作任何限制
練習:
使用angularJS內置$http服務中的jsonp方法完成百度搜索
$location服務(地址欄中的服務):
$location服務裏面的方法:
三種不經常使用:
$anchorScroll() 服務(結合$location作瞄點功能,實現頁面跳轉):
實現瞄點頁面內調整功能。$anchorScroll() 解決屢次點擊錨點沒有反應的問題。
$cacheFactory緩存服務:
供應商概念:針對服務的相關初始配置工做(修改初始配置)。經過模塊下面的 config([ ‘服務名稱Provider’]) 進行修改(全部的配置要在config要在最上面定義):
1. 修改定界符號配置。
2. 修改錨點阻止自動滾動配置。
自定義服務的三種方式:
factory:
service:
provider 特色:
增刪改查案例:
provider 特色:
默認不能使用系統內置的服務,可是能夠在供應商config裏面進行配置,並且只有provider定義的服務纔可使用 .config() ,只能在provider中修改定界符、手動滾動等配置。
factory特色:
可使用系統內置服務,也可使用 .config() 配置一些變量,而且可使用this表明factory表明供應商,可是不能配置定界符、手動滾動。
service特色:
可使用系統內置服務,可是不能使用配置 .config()。推薦使用。
每一個控制器都有可能會使用自定義服務 因此將模塊裏面的服務寫到 service.js 裏面去,而且將自定義服務的名稱加載到控制器中。
ng-route:路由插件:
在單頁面應用裏面,必定會有不少欄目例如:做品列表、文章列表、我的中心等,咱們點擊某個欄目的時候爲了用戶體驗更流暢,一般不會讓其直接跳轉到其餘網頁,而是經過路由設置。
注意:
如今使用的angular.min.js 的版本是:1.3,使用 ng-route插件的時候,他的版本要低於angular.js 的版本。
ng-route 設置單獨控制器:
ng-route 定義控制器:
ng-route 傳遞參數:
結果:
路由切換:
1. 使用$location.path() 生成路徑,可是生成的路徑後面的參數只能有一個。
2. 接收參數並制定控制器。
3. 默認首頁也要寫上參數。
4. 在控制器裏面注入$location
服務內部事件廣播:
在嵌套div標籤 控制器中,給其中一個標籤加了事件,也想讓上面或者下面可以接收該事件,這時須要事件廣播。
例如:
2.向下廣播,$broadcast,其餘都同樣:
事件廣播: 一般用來監聽路由切換。
方法:
阻止事件廣播,不經常使用。
animate動畫插件的簡單使用:
經過css指令完成 淡入淡出動畫
經過JS實現運動效果,實現更復雜的操做:
ngResource 數據交互插件:相似於$http服務,基於RESTFul架構插件。
2. 複雜的使用 結合路由切換讀取不一樣的數據: