一、什么是Angular
- jQuery,它屬於一種類庫(一系列函數的集合),以DOM為驅動核心;而Angular是一種 MVC 的前端框架,則是前端框架,以數據和邏輯為驅動核心,它有着諸多特性,最重要的是:模塊化,雙向數據綁定,語義化標簽,依賴注入等。
- MVC 開發模式:model(模型),view(視圖),controller(控制器)。
二、模塊化
最大程度實現代碼復用
定義應用
- 為HTML標簽添加 ng-app 屬性,表明整個文檔都是應用,也可指定標簽添加,該標簽包裹的所有內容都是應用的一部分(++注:沒有關聯相應模塊,一定不能賦值;但如果關聯相應模塊,必須賦值++)
定義模塊
- 提供一個全局對象Angular,用angular.module(參數1,參數2)方法定義模塊,輸出一個返回值。
- 第一個參數:跟ng-app的值一致;
- 第二個參數:數組。表明該模塊依賴其他模塊,依賴不存在則寫 [ ];
定義控制器(view和model的橋梁)
- 定義模塊輸出的返回值.controller(參數1,參數2)。
- 第一個參數:控制器名稱(++確定與view的關聯++,在HTML標簽添加ng-controller:控制器名稱);
- 第二個參數:為一個數組,除了最后一個單元是函數,其余都是字符串,該參數表明控制器的依賴關系。
三、指令
-
常用內置指令
1.ng-app 指定應用根元素,至少有一個元素指定了此屬性。
2.ng-controller 指定控制器
3.ng-show 控制元素是否顯示,true顯示、false不顯示(通過display:none/block來控制)
4.ng-hide 控制元素是否隱藏,true隱藏、false不隱藏
5.ng-if 控制元素是否“存在”,true存在、false不存在(與ng-show區別:當為false的時候,連同整個DOM節點都不存在)
6.ng-src 增強圖片路徑
7.ng-href增強地址
8.ng-class 控制類名 (后面可接對象,如ng-class="{done: true}")
9.ng-include 引入模板
10.ng-disabled 表單禁用
11.ng-readonly 表單只讀
12.ng-checked 單/復選框表單選中
13.ng-selected 下拉框表單選中
-
自定義指令
- directive
- directive
四、數據綁定
單向綁定
- 只能是模型數據向視圖傳遞(類似artTemplate模板引擎的工作方式)
- 相關指令:
- 通過 {{}} 或者 ng-bind 來實現模型數據向視圖模板的綁定,模型數據由一個內置服務$scope提供,它是個空對象,通過為這個對象添加屬性或方法,便可以在相應的視圖模板里被訪問。
- 這里的 {{}} 是 ng-bind 的簡寫形式,區別在於通過 {{}} 綁定數據時會出現閃屏,添加添加 ng-cloak 也可以解決“閃爍”現象。
雙向綁定
- 視圖 -->傳到 模型上 -->再傳回視圖
- 相關指令:
- ng-model
- 舉一個小例子:
<body ng-app>
<input type="text" ng-model='mesg'>
<h1>{{mesg}}</h1>
</body>
初始化模型(既初始化$scope)
- ng-init (很少用)。
事件處理
- 無需顯式的獲取DOM元素便可添加事件
- 在原有事件前面添加前綴“ng”,然后以屬性的形式添加到HTML便簽中,例如:ng-click
數據處理
- 相關指令:
- ng-repeat: 可以將數組或對象數據迭代到視圖模板中
- ng-switch 和 ng-switch-when 配合使用
五、作用域
- 每個controller下的$scope產生不同的作用域
- 根作用域:ng-app所在的標簽內
六、過濾器
- 內置過濾器
- currency[貨幣] 將數值格式化為貨幣格式
- date 日期格式化,年(y)、月(M)、日(d)、星期(EEEE/EEE)、時(H/h)、分(m)、秒(s)、毫秒(.sss),也可以組合到一起使用。
- filter 在給定數組中選擇滿足條件的一個子集,並返回一個新數組,其條件可以是一個字符串、對象、函數
- json 將Javascrip對象轉成JSON字符串。
- limitTo 取出字符串或數組的前(正數)幾位或后(負數)幾位
- lowercase 將文本轉換成小寫格式
- uppercase 將文本轉換成大寫格式
- number 數字格式化,可控制小位位數
- orderBy 對數組進行排序,第2個參數是布爾值可控制方向(正序或倒序)
- 自定義過濾器
- 通過模塊對象實例提供的filter方法自定義過濾器
- 總結
- 豎線調用,冒號傳值。
七、依賴注入
- 通過注入的方式解決依賴問題,通過回調函數的參數來實現。
- 常見AngularJS內置服務:$http、$http、$location、$timeout、$rootScope
- 分類:
- 行類式
- 推斷式(不建議使用,代碼壓縮后,參數無法找到,無法找到依賴)
八、服務
- 內置服務
- $Timeout 和 $interval與原生JS區別,不需要每次手動開啟臟值檢查,即$scope.$digest()
- 是對原生JS的封裝
- 常見內置服務:
-
$http 向服務器端發起異步請求(注意前后端言行(接收/發送)一致)
- post的請求方式:對應數據用data,
- post要有個請求頭headers,這里headers的值用{}括起來,angularJS默認是'application/json'。發送請求頭有兩種格式來傳送數據(注意:php中$_POST[ ]只能接收formData格式數據的application/x-www-form-urlencoded這一種格式的數據)
- 'Content-Type', 'application/x-www-form-urlencoded',該格式發送的參數為字符串key=value格式,例如"username=zhangsan".
- 'Content-Type', 'application/json',該格式發送的參數為json格式,例如{"username":"zhangsan"}
- get的請求方式:對應數據用params,ps:服務器端接收$_GET[], 在success中打印$log.info(ret)可以檢查數據是否傳到服務器。
- 1.5.8之前的版本,回調函數用success(),error();1.6版本之后的版本用then()
- 跨域
- jsonp 用一句話概括,前端發送一個事先定義好的函數名給服務端,服務端接收這個函數名並拼湊“()”,並返回;前端就接收了一個函數的調用
- method: "jsonp" ,params:{ callback:"JSON_CALLBACK" },其中JSON_CALLBACK為臨時定義的函數名發給服務端,讓服務端替換(注:1.6之后不需寫這個);在jquery中,自動幫你傳了,所以不用這一步。
-
$log 打印調試信息($log.log()、$log.error()、$log.warn()、$log.debug()、$log.info())
-
$filter 在控制器中格式化數據
-
$Timeout 和 $interval
-
- 自定義服務
九、模塊加載
- 配置塊
- 通過config來實現對服務的配置(也可以更改一些服務的默認設置),AngularJS絕大多數服務都有對應的provider。例如:$route 對應的$routeProvider(配置路由)
- 運行塊
- 特殊:run方法 還是最先執行的。 案例:比如驗證用戶是否登錄,未登錄則不允許進行任何其它操作。
十、路由
-
功能:一個應用由若干個個視圖組成,然后呢,根據不同的業務邏輯展示不同的視圖給用戶。
-
理解
- SPA:Single Page Application 單頁面應用
- 鏈接使用錨點
- 單一頁面原理:單頁面通過hashchange事件監聽錨點的變化,實現不同錨點准備找到對應的視圖
-
路由: AngularJS基於單一頁面原理進行封裝,將錨點變化封裝成路由,這也是與后端路由的根本區別
-
路由的使用:
-
需引入angular-route.js文件
-
實例化模塊,傳入依賴(路由名稱為:ngRoute)
-
配置路由(config、$routeProvider、when(條件))
-
布局模板(用ng-view指令,路由匹配的視圖會渲染到該區域)
-
-
路由的參數:
- 兩種方法匹配路由:when和otherwise,when可以調用多次。otherwise作為when的補充,參數只有一個。
- when有兩個參數
- 參數1:是個字符串,代表當前url的hash值;例如:“/:type”
- 參數2:是一個對象,配置當前路由參數,如視圖、控制器
- template:字符串形式視圖模板
- templateUrl:引入外部視圖模板
- controller:視圖模板所屬控制器,作用之一:通過http請求向后台要數據
- redirectTo:跳轉到其他路由 例如:“/2”;
- 獲取路由參數,在控制器中注入$routeParams,可以傳遞參數給后台或其他。