module(模塊)
做用
- 經過模塊對頁面進行業務上的劃分,根據不一樣的功能劃分不一樣的模塊。
- 將重複使用的指令或者過濾器之類的代碼作成模塊,方便複用
- 注意必須指定第二個參數,不然變成找到已經定義的模塊
- 請參照資料-備課代碼-20-module.html理解
語法
- 語法:
angular.module('模塊名',[])
- 第二個參數是個數組,這個數組裏的每個元素,是咱們當前模塊依賴的其餘模塊
- 注意: 即使咱們不依賴其餘的模塊,也須要傳遞一個空數組
由於如是不傳第二個參數的話,這個方法的做用就會變爲獲取一個名爲"模塊名"的模塊對象
angular.module('myApp')
,是獲取一個名爲myApp的模塊對象。
- 咱們須要給ng-app指令一個屬性值,這個值就是咱們建立的模塊名:
- 告訴anuglar,如今由咱們本身建立的這個模塊來管理頁面。
controller(控制器)
做用
- 爲應用中的模型設置初始狀態
- 經過$scope對象把數據模型或者函數行爲暴露給視圖
- 監視模型的變化,作出相應的動做
- 請參照資料-備課代碼-24-watch.html理解
語法
- 控制器是經過模塊對象來建立的:
語法:html
var app = angular.module('模塊名',[])
app.controller('控制器的名字',function($scope){
// 在這個function裏寫咱們具體想要執行的代碼
// $scope 就是用來存儲咱們的數據模型.
})
咱們須要在頁面上使用了數據模型的元素父級元素上加上ng-controller指令,並給這個指令一個屬性值,這個值就是咱們建立的控制器名字。git
控制器的注入方式
普通的定義控制器
var myModule = angular.module('myModule', []);
myModule.controller('DemoController', function($scope) {
$scope.user = {
name: 'world1111'
};
});
安全的定義控制器(推薦)
- angular代碼在壓縮混淆的時候回被替換成特殊字符,這樣就會產生找不到對象的問題
- 請參照資料-備課代碼-07-controller2.html理解
- 代碼混淆工具
面向對象的方式定義控制器(擴展)
- 請參照資料-備課代碼-09-oo-controller.html理解
MVC 思想
什麼是 MVC 思想
用MVC構建應用的優點
- 剝離開視圖和邏輯之間的關係,不管怎麼修改dom操做都不用修改業務邏輯代碼
- 請參照資料-備課代碼-23-calc2.html理解
MVC思想總結
- 是一種設計思想,約定了程序的結構應該是怎樣的,
- 每個組成原件都有一個明確的職責
- 提升代碼的結構和可維護性提升
雙向數據綁定
- 頁面文本框的值改變,致使數據模型的值發生改變,
- 數據模型的值的改變,反過來致使頁面文本框的值的改變,這種相互影響的關係,咱們起了個名詞,叫做雙向數據綁定。
- ng-model = ""
$scope
- 視圖和控制器之間的數據橋樑
- 用於在視圖和控制器之間傳遞數據
- 用來暴露數據模型(數據,行爲)
ViewModel
- $scope 實際上就是MVVM中所謂的VM(視圖模型)
- 正是由於$scope在Angular中大量使用甚至蓋過了C(控制器)的概念,因此不少人(包括我)把Angular稱之爲MVVM框架,這一點卻是無所謂,具體看怎麼用罷了
- 你們必須掌握的就是如何根據一個原型抽象出對應的視圖模型
表達式
相似於模版引擎的語法express
做用:
使用表達式把數據綁定到 HTML。bootstrap
語法:
- 表達式寫在雙大括號內:{{ expression }}。
- AngularJS 表達式很像 JavaScript 表達式
- 它們能夠包含文字、運算符和變量
- 如 {{ 5 + 5 }} 或 {{ firstName + '-' + lastName }}
- 請參照資料-備課代碼-10-expression.html理解
支持的類型
- 數字 {{ 100 + 100 }}
- 字符串 {{ 'hello' + 'angular' }}
- 對象 {{ zhangsan.name }}
- 數組 {{ students[10] }}
與JS的比較:
相同點:數組
- AngularJS 表達式能夠包含字母,操做符,變量。
不一樣點:瀏覽器
- AngularJS 表達式能夠寫在 HTML 中。
- AngularJS 表達式不支持條件判斷,循環及異常。
- AngularJS 表達式支持過濾器。
指令
- 在 AngularJS 中將前綴爲 ng- 這種屬性稱之爲指令,其做用就是爲 DOM 元素調用方法、定義行爲綁定數據等
- 簡單說:當一個 Angular 應用啓動,Angular 就會遍歷 DOM 樹來解析 HTML,根據指令不一樣,完成不一樣操做
指令標準屬性的問題
內置指令
ng-app
- ng-app 指令用來標明一個 AngularJS 應用程序
- 標記在一個 AngularJS 的做用範圍的根對象上
- 系統執行時會自動的執行根對象範圍內的其餘指令
- 能夠在同一個頁面建立多個 ng-app 節點(不推薦)
- 建立多個ng-app時,默認只能執行第一個,後面的須要手動引導:angular.bootstrap()
- 標記的範圍儘量小,這樣能夠減小遍歷的dom元素,主要爲了性能
自動引導
- 在angular中一個頁面中只能有一個ng-app指令,這是單頁面應用程序的入口,這屬於自動引導
- 請參照資料-備課代碼-02-module.html理解
手動引導
- 若是想在一個頁面中使用多個ng-app指令,須要進行手動引導
- 請參照資料-備課代碼-03-mulit-module.html理解
多模塊使用標準寫法
- 請參照資料-備課代碼-04--module2.html理解
- 請參照資料-圖片-01--angular應用結構圖理解
ng-model
- 用於創建界面上的元素到數據模型屬性的雙向數據綁定
- 通常狀況綁定到元素的value屬性上
- 可是在checkbox之類的表單元素會有不一樣
ng-bind
- ng-bind和表達式效果相同,不過能防止閃動一下頁面
- ng-bind上來是沒有東西的,須要經過viewmodel或者ng-init初始化綁定的值
- 請參照資料-備課代碼-11-directive.html理解
ng-bind-html
- 能夠把字符串中的html在頁面中直接展現
- 不過在使用的時候會報不安全問題,缺乏引用的文件,須要引用第三方的包才能實
- 請參照資料-備課代碼-11-directive.html理解
- 現安全輸出瀏覽器自動也會幫你處理一些安全問題的,不會執行或者輸出不安全的代碼,
你在開發的過程當中要有意識的考慮攻擊問題,想一下輸出的會不會是可執行的代碼,須要編碼後再呈現。
- 請參照資料-備課代碼-12-html-safe.html理解安全問題
ng-repeat
- 循環輸出頁面內容
- 請參照資料-備課代碼-13-userful-directive.html理解
- 數據源是數組
var data = [
/* beautify ignore:start */
{ id: 1, name: '詹三1', age: 118, gender: true },
{ id: 2, name: '詹三2', age: 128, gender: true },
{ id: 3, name: '詹三3', age: 138, gender: true },
{ id: 4, name: '詹三4', age: 148, gender: true },
{ id: 5, name: '詹三5', age: 158, gender: true },
/* beautify ignore:end */
];
<ul ng-controller="MainController">
<li ng-repeat="item in data">
<p>
<span>{{item.id}}</span>
<span>{{item.name}}</span>
<span>{{item.age}}</span>
</p>
</li>
</ul>
var data = {
/* beautify ignore:start */
1: { name: '詹三1', age: 11, gender: true },
2: { name: '詹三2', age: 12, gender: true },
3: { name: '詹三3', age: 13, gender: true },
4: { name: '詹三4', age: 14, gender: true },
5: { name: '詹三5', age: 15, gender: true },
/* beautify ignore:end */
};
<ul ng-controller="MainController">
<li ng-repeat="(id, item) in ps track by $index">
<p>
<span>{{id}}</span>
<span>{{item.name}}</span>
<span>{{item.age}}</span>
</p>
</li>
</ul>
ng-class
- 決定某個樣式是否添加
- ng-class={classname1:是否添加,classname2:是否添加}
- 請參照資料-備課代碼-14-ng-class.html理解
$apply
- 異步操做中的數據綁定不能及時監聽到,讓頁面渲染,因此須要手動調用一下
- 請參照資料-備課代碼-15-loading.html理解
ng-cloak
- 自動給頁面元素添加dispaly:none屬性,當頁面渲染完畢自動刪除
- 最後你會發現直接把angularjs引用到最上面就不會有閃屏現象了,由於angularjs在頁面渲染的時候已經執行了
- 請參照資料-備課代碼-16-ng-cloak.html理解
ng-show/ng-hide/ng-if
- ng-show和ng-hide是控制頁面是否顯示
- ng-if的做用是控制是否存在這個dom元素,若是值等於false會把頁面中的元素註釋
- 請參照資料-備課代碼-17-if-show-hide.html理解
ng-switch
- 根據value值決定頁面中的哪部分顯示
- 請參照資料-備課代碼-17-if-show-hide.html理解
ng-src
- 用於解決當連接類型數據綁定時候形成的加載問題
- ng-src指令會自動幫你把屬性值賦值給src屬性,相似於懶加載中的效果同樣
- 請參照資料-備課代碼-18-ng-src-ng-href.html理解
其餘經常使用指令
- ng-checked:
- 單選/複選是否選中,只是單向綁定數據
- 請參照資料-備課代碼-19-ng-checked.html理解
- ng-selected:
- ng-disabled:
- ng-readonly:
經常使用事件指令
不一樣於以上的功能性指令,Angular還定義了一些用於和事件綁定的指令:
- ng-blur:
- ng-change:
- ng-copy:
- ng-click:
- ng-dblclick:
- ng-focus:
- ng-blur:
- ng-submit:
第三方指令