ng
AngularJS 誕生於2009年,由 Misko Hevery 等人建立,後爲Google所收購。 是一款優秀的前端JS框架,已經被用於Google的多款產品當中。 AngularJS有着諸多特性,最爲核心的是: MVC、模塊化(編程)、自動化雙向數據綁定、語義化標籤、指令、依賴注入等等。
Single Page Application
單頁Web應用(single page application,SPA),就是隻有一個Web頁面的應用, 是加載單個HTML頁面,並在用戶與應用程序交互時動態更新該頁面的Web應用程序。
單頁面應用程序:html
傳統多頁面應用程序:前端
4 能夠選擇性的保留狀態,如音樂網站,切換頁面時不會中止播放歌曲git
傳統ajax的劣勢:angularjs
1 ajax請求不會留下歷史記錄 2 用戶沒法直接經過URL直接進入指定頁面 3 ajax對SEO不友好
ng-app
指令ng-model
指令ng-click
指令ng-
的屬性稱之爲指令,其做用是爲DOM元素綁定數據、添加事件 等<input type="text" ng-model="userName">
ng-app 指令指定了應用的根元素,一般放置在頁面的根元素,也能夠是任意的元素 例如:body或html標籤 應用程序運行時,會自動執行邊界內部的其餘指令。 標記的範圍儘量小,提升性能 注意:每一個頁面中能夠出現屢次 `ng-app` 指令(不推薦!) 若是是多個須要手動引導:`angular.bootstrap()`
ng-click="expression"
<button ng-click="val + 1"></button>
ng-model指令將嘗試把屬性綁定到當前做用域中。 若是當前做用域中沒有該屬性,那麼AngluarJS會幫咱們隱式建立而且添加到當前做用域中。
ng-init="uName='Jack'"
從JS角度,使用運算符和數據 鏈接起來的有 結果 的代碼就是:表達式 注意:不帶分號 例如: 可使用 console.log(); 打印出來, 或者 console.log( expression ); 能夠用做 賦值運算符 的右值 var test = expression;
<p>{{user.name}}</p> <p>{{1 + 8}}</p> <p>{{"hello" + "world"}}</p> <div ng-click="sayHi()"></div>
<body ng-app> <input type="text" ng-model="user.name" /> <p>Hello {{user.name}}</p> </body>
ng-app
告訴AngularJS讓它來管理 body內部的代碼ng-app
指令建立了一個對象,對象中包含了AngularJS的相關內容,例如:數據模型ng-model
指令查詢數據模型中有沒有 user
對象以及name
屬性,沒有則建立user
對象以及name
屬性,並初始化name
值爲:空字符串{{user.name}}
從數據模型中查找有沒有該數據,若是有就取出來,並展現ng-model
和{{}}
中的 user.name 指向的是數據模型中同一個數據模塊是一個容器包含了應用程序的不一樣組成部分,而且這些內容必需要依附於一個模塊 例如:controllers, services, filters, directives, configs 等 模塊是應用程序的組成單元,例如:登陸模塊、註冊模塊、商品列表模塊 等,這些模塊 組合在一塊兒構成了一個完整的應用程序。
var app = angular.module(moduleName, []);
// 第一個參數:模塊名稱,字符串 // 第二個參數:數組,用來添加當前模塊的依賴項 var app = angular.module("firstApp", ["otherModuleName"]);
var app = angular.module(moduleName);
ng-controller
指令來使用app.controller(ctrlName, callback);
app.controller("DemoController", function($scope) { // $scope 至關於當前的數據模型 });
$scope
這個名稱必須這麼寫!$scope
是在控制器建立的時候,被注入進去的1 ng 在使用的時候,頁面中只要有 ng-app 就會建立一個 scope,名字是:$rootScope 2 $scope 是 HTML(視圖)背後的「男人」 ----> 視圖:女人,負責美(展現) $scope:男人,負責提供美的資源(數據) 3 全部的控制器都繼承自 $rootScope 4 繼承是按照:原型式繼承 來實現 5 對於HTML來講,參照原型式繼承:子節點繼承自父節點
ng-model
指令實現數據模型的值發生改變,就會致使頁面值的改變;頁面值的改變,也會致使數據模型中值的改變, 這種相互影響的關係就是雙向數據綁定。
{{}}
表達式來實現MVC(Model–view–controller)是一種軟件架構模式, 把軟件系統分爲三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。 MVC是一種應用程序的設計思想(不是設計模式)
ng-app
指令包裹的HTML代碼例如:移動端和PC端兩個View,共享同一個Model 在MVC設計模式中, Model 響應用戶請求並返回響應數據, View 負責格式化數據並把它們呈現給用戶,業務邏輯和表示層分離, 同一個 Model 能夠被不一樣的 View 重用,因此大大提升了代碼的可重用性。
M: model 模型,至關於 User(構造函數) V: view 視圖, ng-app 管理的頁面 VM: ViewModel 視圖模型 在Angular中就是:$scope
MVW
===> "Model View Whatever"getItem(keyName)
:讀取,參數類型:stringsetItem(keyName, keyValue)
:設置,參數類型:string$scope.$watch(attrName, callback, flag);
app.controller("demoController", function($scope) { $scope.name = "jack"; // 參數一:表示監聽的$scope中的屬性名稱,類型爲:字符串 // 參數二:表示數據變化執行的回調函數,有兩個參數分別是:當前值與變化以前的值 // 參數三:比較方式,false:表示比較引用;true:表示比較值。默認值爲false $scope.$watch("name", function(curValue, oldValue) { // 只要被監聽的數據發生變化,就會指定該回調函數中的代碼! // 略過第一次執行 if(curValue === oldValue) return; }); });
ng-app
指令啓動angular.bootstrap(document, ['MyModule'])
// 等待文檔加載完成後,啓動 angular angular.element(document).ready(function() { angular.bootstrap(document, ['MyModule']); });
ng-app
ng-app
而且啓動,若是啓動其餘的,須要手動啓動<div ng-app="FirstApp"></div> <div ng-app="SecondApp"></div>
使用jQuery的思路: 1 想要獲取元素,我調用 $(selector) 2 元素綁定事件,我調用 .on() 3 進行什麼DOM操做,我調用什麼方法完成 總結:你告訴jQuery你要作的操做,jQuery就能幫你作好。 **在使用庫的過程當中,開發人員是 控制者**
Angular提供了一套完整的解決方案,全部的流程都設定好了 咱們只須要按照流程規則,把咱們的代碼進行填坑。