它的創新之處在於,經過數據綁定和依賴注入減小了大量代碼,而這些都在瀏覽器端經過JavaScript實現,可以和任何服務器端技術完美結合。
一、雙向數據綁定,視圖和數據模型綁定html
二、全部的屬性的解析都是相對於做用域(scope)
解析一個Angular表達式,使用$eval(expr)方法,表達式中不容許包括下列語句:條件判斷(if),循環(for/while),拋出異常(throw)
若是指定了模塊 ng-app="app" 那麼須要angular.module("app", []).controller("someCntl", function() {});
<html ng-app="app">
<div ng-controller="someCntl"></div>
</html>
angular.module('myModule', []).config(function(injectables) {}).run(function(injectables) {});
run方法當模塊注入(injector )之後觸發,只有實例和常量(instances and constants)能夠注入到run裏,爲了防止未來程序運行的時候配置系統
config在(provider registrations and configuration phase)時運行,只有(providers and constants)能夠注入到config裏,這是爲了防止服務在徹底配置好以前安裝出現意外
在angular裏,view是module經過HTML 模板映射出的效果,當model改變的時候,angular也會刷新view
.state('app', {
url: "/app", 導航或轉換到時,會被傳遞的參數
abstract: true, 抽象的狀態永遠不會被激活,可是能夠提供屬性以被其子狀態繼承
templateUrl: "templates/menu.html",
controller: 'AppCtrl',
views: { 使用視圖屬性來設置多個視圖。若是你沒有在一個state內須要多個視圖這個屬性是沒有必要的。提示:請記住,一般嵌套的視圖比平級的視圖更加有用和強大。
'menuContent': {
templateUrl: "templates/browse.html"
}
}
})
測試:
若是controller是全局的,那麼就能夠虛擬出一個scope實例對象:
describe('PhoneListCtrl', function(){
it('should create "phones" model with 3 phones', function() {
var scope = {},
ctrl = new PhoneListCtrl(scope);
expect(scope.phones.length).toBe(3);
});
});
若是控制器不是全局的話:
describe('PhoneListCtrl', function(){
beforeEach(module('phonecatApp'));
it('should create "phones" model with 3 phones', inject(function($controller) {
var scope = {},
ctrl = $controller('PhoneListCtrl', {$scope:scope});
expect(scope.phones.length).toBe(3);
}));
});
和服務器通訊使用$http,它是基於deferred/promise APIs
then處理異步請求,按照順序依次處理多個異步請求。是一個promise,等結果出來再根據結果執行
$cordovaGeolocation .getCurrentPosition(posOptions) .then(function (position) { //done }, function(err) { // error });