導航:首頁 > 編程語言 > anjularjs創建對象

anjularjs創建對象

發布時間:2023-01-29 03:00:47

『壹』 在angular中 function中的$scope和$rootscope有什麼區別

scope是angularjs中的作用域(其實就是存儲數據的地方),很類似javascript的原型鏈。搜索的時候,優先找自己的scope,如果沒有找到就沿著作用域鏈向上搜索,直至到達根作用域rootScope。
$rootScope是由angularJS載入模塊的時候自動創建的,每個模塊只會有1個rootScope。rootScope創建好會以服務的形式加入到$injector中。也就是說通過$injector.get("$rootScope");能夠獲取到某個模塊的根作用域。更准確的來說,$rootScope是由angularJS的核心模塊ng創建的。


scope是html和單個controller之間的橋梁,數據綁定就靠他了。rootscope是各個controller中scope的橋梁。用rootscope定義的值,可以在各個controller中使用
111

1234567891011121314151617示例1://新建一個模塊varmole=angular.mole("app",[]);//true說明$rootScope確實以服務的形式包含在模塊的injector中varhasNgInjector=angular.injector(['app','ng']);console.log("has$rootScope="+hasNgInjector.has("$rootScope"));//true//獲取模塊相應的injector對象,不獲取ng模塊中的服務//不依賴於ng模塊,無法獲取$rootScope服務varnoNgInjector=angular.injector(['app']);console.log("no$rootScope="+noNgInjector.has("$rootScope"));//false//獲取angular核心的ng模塊varngInjector=angular.injector(['ng']);console.log("ng$rootScope="+ngInjector.has("$rootScope"));//true12上面的代碼的確可以說明:$rootScope的確是由核心模塊ng創建的,並以服務的形式存在於injector中。如果創建injector的時候,指定了ng模塊,那麼該injector中就會包含$rootScope服務;否則就不包含$rootScope。示例2:<!doctypehtml><htmllang="en"><head><metacharset="utf-8"><scriptsrc="angular-1.2.25.js"></script><script>varmole=angular.mole("app",[]);//控制器里的$injector,是由angular框架自動創建的functionFirstController($scope,$injector,$rootScope){$rootScope.name="aty";}//自己創建了個injector,依賴於app和ng模塊varmyInjector=angular.injector(["app","ng"]);varrootScope=myInjector.get("$rootScope");alert(rootScope.name);//udefined</script></head><bodyng-app="app"><divid="first"ng-controller="FirstController"><inputtype="text"ng-model="name">{{name}}</div> </body></html>angular.injector()可以調用多次,每次都返回新建的injector對象。所以我們自己創建的myInjector和angular自動創建的$injector不是同一個對象,那麼得到的rootScope也就不是同一個。
示例3:<!doctypehtml><htmllang="en"><head><scriptsrc="angular-1.2.25.js"></script><script>functionFirstController($scope,$injector,$rootScope){//trueconsole.log("scopeparent:"+($scope.$parent==$rootScope));}</script></head><bodyng-app><divid="first"ng-controller="FirstController"><inputtype="text"ng-model="name">{{name}}</div> </body></html>ng-controller指令給所在的DOM元素創建了一個新的$scope對象,並作為rootScope的子作用域。$scope是由$rootScope創建的,$scope不會保護在$injector中。示例4:<!doctypehtml><htmllang="en"><head><metacharset="utf-8"><title>scope()</title><scriptsrc="jquery-1.11.1.js"></script><scriptsrc="angular-1.2.25.js"></script><script>//記住rootScope,用來判斷跨控制器是否相等varfirst_rootScope=null;//記住scope,用來判斷跨控制器是否相等varfirst_scope=null;//記住injector,用來判斷跨控制器是否相等varfirst_injectot=null;//第1個angular控制器functionFirstController($scope,$injector,$rootScope){$rootScope.name="aty";first_rootScope=$rootScope;first_injectot=$injector;first_scope=$scope; }//第2個angular控制器,主要是來測試跨controller時injector和scope的表現functionSecondController($scope,$injector,$rootScope){console.log("first_rootScope==second_rootScope:"+(first_rootScope==$rootScope));//trueconsole.log("first_injectot==second_injector:"+(first_injectot==$injector));//trueconsole.log("first_scope==second_scope:"+(first_scope==$scope));//false}</script></head><bodyng-app><divid="first"ng-controller="FirstController"><inputtype="text"ng-model="name"><divid="tips"></div></div><h2>outsideofcontroller</h2><!--訪問每一個應用(模塊)的rootScope-->{{$root.name}}<divid="noControllerDiv"/><divng-controller="SecondController"></div></body></html>


35363738394-app定義了一個angular模塊,每個模塊只有一個$rootScope,只有一個$injector,但可以有多個$scope。弄清了$injector、$rootScope和$scope這3者之間的關系,我們看下angular提供的2個API,一個是scope(),一個是injector()。使用angular.element()返回的DOM對象,都會包含這2個方法,用來獲取與之關聯的scope和injector。由於每個模塊的injector是唯一的,所以angular.element().injector()直接返回元素所在模塊的injector。angular.element().scope()可以獲取到當前元素的scope或父scope。如果當前元素有scope,則返回自己的scope;如果沒有則向父親方向尋找,如果找不到返回rootScope。即返回作用域鏈上,距離該元素最近的scope。<!doctypehtml><htmllang="en"><head><metacharset="utf-8"><title>scope()</title><scriptsrc="jquery-1.11.1.js"></script><scriptsrc="angular-1.2.25.js"></script><script>functionFirstController($scope,$injector,$rootScope){//獲取body對象vardomBody=document.getElementsByTagName('body')[0];//通過ng-app指令所在的DOM元素獲取rootScopevarrtScope=angular.element(domBody).scope(); //當前元素沒有新作用域,獲取父作用域即rootScopevarnoScope=angular.element("#noControllerDiv").scope(); //trueconsole.log("rtScope==noScope:"+(rtScope==noScope));//ng-controller所在的元素,返回的scopevarscopeOnController=angular.element("#first").scope();//ng-controller內部的元素返回所在的scopevarinController=angular.element("#tips").scope();//trueconsole.log("scopeOnController==inController:"+(scopeOnController==inController));//驗證通過DOM獲取的scope是否與注入的$scope和$rootScope一致//trueconsole.log("result1:"+(rtScope==$rootScope));//trueconsole.log("result2:"+(inController==$scope));}</script></head><bodyng-app><divid="first"ng-controller="FirstController"><inputtype="text"ng-model="name"><divid="tips"></div></div><h2>outsideofcontroller</h2><!--訪問每一個應用(模塊)的rootScope-->{{$root.name}}<divid="noControllerDiv"/> </body></html>

『貳』 前端開發主要學習那些技術以適應工作需求

一、前端是什麼?

前端即網站前台部分,也叫前端開發,運行在PC端,移動端等瀏覽器上展現給用戶瀏覽的網頁。隨著互聯網技術的發展,HTML5,CSS3,前端框架的應用,跨平台響應式網頁設計能夠適應各種屏幕解析度,完美的動效設計,給用戶帶來極高的用戶體驗。

核心技術是前端開發中最基本也是最必須的三個技能。前端的開發中,在頁面的布局時, HTML將元素進行定義,CSS對展示的元素進行定位,再通過JavaScript實現相應的效果和交互。雖然表面看起來很簡單,但這裡面需要掌握的東西絕對不會少。在進行開發前,需要對這些概念弄清楚、弄明白,這樣在開發的過程中才會得心應手。
二、前端都需要學什麼(可以分為八個階段)?

1、第一階段:

▪ HTML+CSS:

HTML進階、 CSS進階、p+CSS布局、HTML+CSS整站開發、

▪ JavaScript基礎:

Js基礎教程、js內置對象常用方法、常見DOM樹操作大全、ECMAscript、DOM、BOM、定時器和焦點圖。

▪ JS基本特效:

常見特效、例如:tab、導航、整頁滾動、輪播圖、JS製作幻燈片、彈出層、手風琴菜單、瀑布流布局、滾動事件、滾差視圖。

▪ JS高級特徵:

正則表達式、排序演算法、遞歸演算法、閉包、函數節流、作用域鏈、基於距離運動框架、面向對象基礎、

▪ JQuery:基礎使用

懸著器、DOM操作、特效和動畫、方法鏈、拖拽、變形、JQueryUI組件基本使用。

2、第二階段:HTML5和移動Web開發

▪ HTML5:

HTML5新語義標簽、HTML5表單、音頻和視頻、離線和本地存儲、SVG、Web Socket、Canvas.

▪ CSS3:

CSS3新選擇器、偽元素、臉色表示法、邊框、陰影、flex布局、background系列屬性改變、Transition、動畫、景深和深透、3D效果製作、Velocity.js框架、元素進場、出場策略、炫酷CSS3網頁製作。

▪ Bootstrap:

響應式概念、媒體查詢、響應式網站製作、刪格系統、刪格系統原理、Bootstrap常用模板、LESS和SASS。

▪ 移動Web開發:

跨終端WEB和主流設備簡介、視口、流式布局、彈性盒子、rem、移動終端JavaScript事件、手機中常見JS效果製作、手機聚劃算頁面、手機滾屏。

3、第三階段:HTTP服務和AJAX編程

▪ WEB伺服器基礎:

伺服器基礎知識、Apache伺服器和其他WEB伺服器介紹、Apache伺服器搭建、HTTP介紹。

▪ AJAX上篇:

Ajax簡介和非同步的概念、Ajax框架的封裝、XMLHttpRequest對象詳細介紹方法、兼容性處理方法、Ajax框架的封裝、Ajax中緩存問題、XML介紹和使用、會處理簡單的GET或者POST請求、

▪ AJAX下篇:

JSON和JSON解析、數據綁定和模板技術、JSONP、跨域技術、圖片預讀取和lazy-load技術、JQuery框架中的AjaxAPI、使用Ajax實現爆布流案例額。

4、第四階段:面向對象進階

▪ 面向對象終極篇:

從內存角度到理解JS面向對象、基本類型、復雜類型、原型鏈、ES6中的面向對象、ES6中變數的作用域(let ,const(聲明變數只讀),塊級作用域),ES6中函數新特性。

▪ 面向對象三大特徵:

繼承性、多態性、封裝性。

▪ 面向對象中創建對象的五種方法:

自定義對象 、工廠模式創建對象、構造函數、 混合模式創造對象、JSO格式創建對象。

5、第五階段:封裝一個屬於自己的框架

▪ 框架封裝基礎:

事件流、冒泡、捕獲、事件對象、事件框架、選擇框架。

▪ 框架封裝中級:

運動原理、單物體運動框架、多物體運動框架、運動框架面向對象封裝。

▪ 框架封裝高級和補充:

JQuery框架雛形、可擴展性、模塊化、封裝屬於傳智自己的框架。

6、第六階段:模塊化組件開發

▪ 面向組件編程:

面向組件編程的方式、面向組件編程的實現原理、面向組件編程實戰、基於組件化思想開發網站應用程序

▪ 面向模塊編程:

AMD設計規范、CMD設計規范、RequireJS,LoadJS、淘寶的SeaJS。

7、第七階段:主流的流行框架

▪ Web開發工作流:

GIT/SVN、Vue-cli腳手架、NPM/Bower依賴管理工具、Grunt/Gulp/Webpack。

▪ 前端主流框架:

Vue.js、Angular.js、React.JS、Bootstrap。

▪ 常用庫:

React.js、Vue.js、JQuery.js。

8、第八階段:Node.js全棧開發:

▪ 快速入門:

Node.js發展、生態圈、Io.js、Linux/Windows/OS X環境配置、REPL環境和控制台程序、非同步編程,非阻塞I/O、模塊概念,模塊管理工具、開發流程,調試,測試。

▪ 核心模塊和對象:

全局對象global,process,console,util、事件驅動,事件發射器、加密解密,路徑操作,序列化和反序列化、文件流操作、HTTP服務端與客戶端、Socket.IO。

▪ Web開發基礎:

HTTP協議,請求響應處理過程、關系型資料庫操作和數據訪問、非關系型資料庫操作和數據訪問、原生的Node.js開發Web應用程序、Web開發工作流、Node.js開發Blog案例。

▪ 快速開發框架:

Express簡介+MVC簡介、Express常用API、Express路由模塊、Jade/Ejs模板引擎、使用Express重構Blog案例、Koa等其他常見MVC框架。

▪ Node.js開發電子商務實戰:

需求與設計、賬戶模塊注冊登錄、會員中心模塊、前台展示模塊、購物車,訂單結算、在線客服即時通訊模塊。

『叄』 寶馬主域控制器作用是什麼

【太平洋汽車網】寶馬主域控制器作用有配鑰匙、防盜等。寶馬的主控制單元主域控制器,類似車身的電腦,鑰匙等信息包含在內。

發表於2022年6月24日作者admin上面是兩個不同的控制器,盡管ListCtrl控制器裡面沒有department,但它依然可以訪問到department上的變數值。

神奇的$scope

1.$scope是一個對象;

2.$scope是表達式的執行環境(或者叫做作用域)(它是視圖和控制器之間的膠水);

3.$scope提供了一些工具方法$watch()/$apply();(這個是實時檢測對象屬性變化的,在修改數據時會立刻更新$scope,當$scope發生變化時會立刻重新渲染視圖);(這兩個方法雖然提供了監視數據模型變化的能力,將數據模型的變化在整個應用范圍內進行通知,但一般我們不太會手動去調用$scope.$apply())

4.$scope是一個樹形結構,與DOM標簽平行;

5.子$scope會繼承父$scope上的屬性和方法;

6.每個angularJs應用只有一個$rootScope,一般位於ng-app上,$rootScope是所有$scope的最上層,($rootScope也是angularJs中最接近全局作用域的對象,在$rootScope上附加太多業務邏輯並不是好主意,這與污染javaScript的全局作用域是一樣的)

7.$scope也是實現雙向數據綁定的基礎;

8.可以用angular.element($

0).scope()來進行調試;

9.$scope可以在控制器之間傳播事件,可以向上$scope.$emit();也可以向下$scooe.$broadcast();最後附一張$scope的生命周期圖:創建(創建一個作用域)鏈接($scope對象會鏈接到視圖中)更新(臟值檢查)銷毀(銷毀作用域)

三、廣播3.1相關概念通常作用域之間是不共享變數的,但作用域是有層次的,所以我們可以在作用域上通過廣播來傳遞事件。

Angularjs中不同作用域之間可以通過組合使用$emit,$broadcast,,$on的事件廣播機制來進行通信$emit的作用是將事件從子級作用域傳播至父級作用域,包括自己,直至根作用域。格式如下:$emit(eventName,args)$broadcast的作用是將事件從父級作用域傳播至子級作用域,包括自己。格式如下:$broadcast(eventName,args)$on用於在作用域中監控從子級或父級作用域中傳播的事件以及相應的數據。

(圖/文/攝:太平洋汽車網問答叫獸)

『肆』 如何在angular渲染完dom以後執行js代碼

在angular渲染完dom以後執行js代碼的方法是使用init方法完成dom初始化,同時控制器中寫入需要執行的js代碼即可。
1、html代碼:
<div
data-ng-controller="myCtrl"
data-ng-init="init()"></div>
2、定義的angularjs方法如下:
$scope.init
=
function
()
{
if
($routeParams.Id)
{
//創建一個新對象的js代碼
createElement();
}
else
{
//創建一個新對象的js代碼
createElement();
}
$scope.isSaving
=
false;
}
...
$scope.init();

『伍』 怎麼在angularjs的config中使用service

Angular中有幾種不同類型的services。每一種都有自己的獨特用法。

需要記住的非常重要的一點是service總是一個單體,無論是哪種類型的service。
注釋:單體是一種設計模式,它限制了每一個類僅能夠實例化為一個對象。無論我們在什麼地方注入我們的service,將永遠使用同一個實例。
例子:
app.constant('fooConfig',{
config1: true,
config2: "Default config2" });

Constant是一個非常有用的service,它經常被用來在指令中提供默認配置。因此如果你正在創建一個指令,並且你想要在給指令傳遞可選參數的同時進行一個默認配置,一個Constant就是一個好辦法。
作為一個constant,我們放入其中的值將不會改變。Contant service 基本上回事一個基本類型的值或者是一個對象。
例子:
app.value('fooConfig',{
config1: true,
config2: "Default config2 but it can change" });

一個value service有點像是一個constant但是它是可以被改變的。它也經常被用在一個指令上面,來進行配置。一個value service有點像是一個factory service的縮小版,它經常用來保存值但是我們不能在其中對值進行計算。
我們可以使用angular對象的extend方法來改變一個value service:
app = angular.mole("app", []);

app.controller('MainCtrl', function($scope, fooConfig) { $scope.fooConfig = fooConfig;
angular.extend(fooConfig, {config3: "I have been extended"});
});

app.value('fooConfig', {
config1: true,
config2: "Default config2 but it can changes" });
例子:
app.factory('foo', function() { var thisIsPrivate = "Private"; function getPrivate() { return thisIsPrivate;
} return {
variable: "This is public",
getPrivate: getPrivate
};
});
// or..
app.factory('bar', function(a) { return a * 2;
});

Factory service是最普遍使用的service。它同樣也非常容易理解。

一個Factory是一個能夠返回任何數據類型的service。對於你如何創建它並沒有什麼可選項,你僅僅需要在其中返回一些東西即可。

正如前面所說的,所有的service類型都是單體,因此如果我們在一個地方修改了foo.variable,其他的地方也會相應的發生改變。
例子:
app.service('foo', function() { var thisIsPrivate = "Private"; this.variable = "This is public"; this.getPrivate = function() { return thisIsPrivate;
};
});

Service service 和factory差不多。它們之間的區別在於service會接收一個構造器,因此當你第一次使用它的時候,它將會自動運行newFoo()來實例化一個對象。一定要記住如果你在其他的地方也使用了這個service,它將返回同一個對象。
事實上,上面的代碼和下面的代碼等價:
app.factory('foo2', function() { return new Foobar();
}); function Foobar() { var thisIsPrivate = "Private"; this.variable = "This is public"; this.getPrivate = function() { return thisIsPrivate;
};
}

Foobar是一個類,我們在首次使用它的時候在我們的factory中將它實例化然後將它返回。和service一樣,Foobar將只會實例化一次然後下次當我們再次使用factory時它將返回同一個實例。
如果我們已經有了一個類,並且我們想將它用在service中,我們只需要編寫如下的代碼:
app.service('foo3',Foobar);

Provider是factory的加強版。事實上,上一個例子中的factory代碼等價於下面的provider代碼:
app.provider('foo', function() { return { $get: function() { var thisIsPrivate = "Private"; function getPrivate() { return thisIsPrivate;
} return {
variable: "This is public",
getPrivate: getPrivate
};
}

};

});

一個provider中應當由一個$get函數,其中的內容就是我們想要注入我們應用中的部分,因此當我們將foo注入一個控制器時,我們實際上注入的是$get函數。
既然factory如此簡單,那我們為什麼還要使用provider呢?因為我們可以在config階段配置一個provider。因此我們可以編寫下面的代碼:
app.provider('foo', function() { var thisIsPrivate = "Private"; return {

setPrivate: function(newVal) { thisIsPrivate = newVal;
}, $get: function() { function getPrivate() { return thisIsPrivate;
} return {
variable: "This is public",
getPrivate: getPrivate
};
}

};

});

app.config(function(fooProvider) { fooProvider.setPrivate('New value from config');
});

在這里我們將thisIsPrivate移到了我們的$get函數的外面,然後我們創建了一個setPrivate來在一個config函數中修改thisIsPrivate。為什麼我們需要這樣做?這難道不比在factory中添加setter要容易嗎?除此之外,還有另外一個原因。

我們想要注入一個特定的對象但是我們想要提供一種方式來根據我們的需求進行一些配置。例如:一個service包含了一個使用jsonp的資源,我們想要配置具體使用的URL,或者我們想要使用一個第三方的service比如restangular來允許我們根據我們的需求來進行配置。

要注意到我們在config函數中放入的是nameProvider而不是name。在這里,我們實際上還是對name進行配置。

看到這里我們其實已經意識到了我們已經在應用中進行過一些配置了,像是$routeProvider以及$locationProvider,兩者分別用來配置我們的路由了html5模式。

那麼現在已經決定要使用前面的 foo service,但是其中還是缺少一個你想要的greet函數。你可以修改factory嗎?答案是不行!但是你可以裝飾它:
app.config(function($provide){ $provide.decorator('foo',function($delegate){ $delegate.greet = function(){ return "Hello, I am a new function of 'foo'";
}
});
});

$provide是Angular用來在內部創建我們的service的東西。如果我們想要使用它的話可以手動來使用它或者僅僅使用在我們的模塊中提供的函數(我們需要使用$provide來進行裝飾)。$provide有一個函數,decorator,它讓我們可以裝飾我們的service。它接收我們想要裝飾的service的名字並且在回調函數中接收一個$delegate來代表我們實際上的service實例。

在這里我們可以做一切我們想要的事情來裝飾我們的service。在上面的例子中,我們為我們原來的service添加了一個greet函數。接著我們返回了修改後的service。

經過修改以後,現在我們的factory中已經有了一個叫做greet的函數。

裝飾一個service的能力是非常實用的,尤其是當我們想要使用第三方的service時,此時我們不需要將代碼復制到我們的項目中,而只需要進行一些修改即可。

注意:constant service不能被裝飾。

我們的services都是單體但是我們可以創建一個單體factory來創建新的實例。在你深入之前,記住Angular中的服務都是單體並且我們不想改變這一點。但是,在極少數的情況下你需要生成一個新的實例,你可以像下面這樣做:
function Person(json){ angular.extend(this,json);
}

Person.prototype = {
update: function(){ this.name = "Dave"; this.country = "Canada";
}
};

Person.getById = function(id){ return new Person({
name: "Jesus",
country: "Spain" });
};
app.factory('personService',function(){ return {
getById: Person.getById
};
});

在這里我們創建了一個Person對象,它接收一些json數據來初始化對象。然後我們在我們的原型(原型中的函數可以被Person的實例所用)中創建了一個函數,並且在Person上直接創建了一個函數(就像是類函數一樣)。

因此現在我們擁有了一個類函數,它將基於我們提供的id來創建一個新的Person對象,並且每一個對象都可以自我更新。現在我們僅僅需要創建一個能夠使用它的service。

當每次我們調用personService.getById時,我們都在創建一個新的Person對象,因此你可以在不同的控制器中使用這個service,即便當factory是一個單體,它也能生成新的對象。

Service是Angular中最酷的特性之一。我們可以使用很多方法來創造它們,我們僅僅需要找到符合我們需求的方法然後實現它。

『陸』 angularjs裡面的config有什麼作用

在angularjs的config中使用service的方法:
它是一個可注入的構造器,在AngularJS中它是單例的,用它回在Controller中通信或者共享數據都答很合適
var app = angular.mole('app' ,[]);

app.config(function ($provide) {
$provide.service('movie', function () {
this.title = 'The Matrix';
});
});

app.controller('ctrl', function (movie) {
expect(movie.title).toEqual('The Matrix');
});

語法糖:
app.service('movie', function () {
this.title = 'The Matrix';
});

在service裡面可以不用返回東西,因為AngularJS會調用new關鍵字來創建對象。但是返回一個自定義對象好像也不會出錯。

『柒』 angularJS與如何與原生對象交互

首先來進行一個最基本的定義,由於我們需要數據綁定功能,我們將從一開始就require ngModel:
.directive('timePicker',function(){ var today = new Date(new Date().toString()); return { require: '?ngModel', link: function($scope,$element,$attrs,ngModel){ } }});
注意到我們需要涉及元素的實際實例,因此我們所有的代碼基本上都位於linking函數中,我們在此完全不需要擔心編譯過程。我們同事也實例化了一個today變數來保存一個Date對象,以此在午夜十分更新。創建這個變數作為factory函數的一部分允許我們在多個實例之間分享一個today變數。注意,盡管這允許我們將內存的使用最小化,它也意味著如果我們的應用在半夜還依然再運行,我們的指令會開始提供不準確的結果。如果你打算將這個指令用於一個實時應用中,你最好創建另一個函數在第二天來臨時更新這個值。現在,我們急需要看我們的controller函數:
link: function($scope.$element,$attrs,ngModel){ ngModel = ngModel || { "$setViewValue" : angular.noop }}
你以前可能也注意過這種模式。

『捌』 搭建angular的時候cannot get 是什麼意思

我們可以使用內置的$http服務直接同外部進行通信。$http服務只是簡單的封裝了瀏覽器原生的XMLHttpRequest對象。

1、鏈式調用
$http服務是只能接受一個參數的函數,這個參數是一個對象,包含了用來生成HTTP請求的
配置內容。這個函數返回一個promise對象,具有success和error兩個方法。

$http({

url:'data.json',

method:'GET'

}).success(function(data,header,config,status){

//響應成功

}).error(function(data,header,config,status){

//處理響應失敗

});
2、返回一個promise對象

var promise=$http({

method:'GET',

url:"data.json"

});
由於$http方法返回一個promise對象,我們可以在響應返回時用then方法來處理回調。如果
使用then方法,會得到一個特殊的參數,它代表了相應對象的成功或失敗信息,還可以接受兩個
可選的函數作為參數。或者可以使用success和error回調代替。

promise.then(function(resp){

//resp是一個響應對象

},function(resp){

//帶有錯誤信息的resp

});
或者這樣:

promise.success(function(data,status,config,headers){

//處理成功的響應

});

promise.error(function(data,status,hedaers,config){

//處理失敗後的響應

});
then()方法與其他兩種方法的主要區別是,它會接收到完整的響應對象,而success()和error()則會對響應對
象進行析構。

3、快捷的get請求

①$http.get('/api/users.json');

get()方法返回HttpPromise對象。

還可以發送比如:delete/head/jsonp/post/put 函數內可接受參數具體參照148頁

②以再發送jsonp請求舉例說明: 為了發送JSONP請求,其中url必須包含JSON_CALLBACK字樣。

jsonp(url,config) 其中config是可選的

var promise=$http.jsonp("/api/users.json?callback=JSON_CALLBACK");

4、也可以將$http當做函數來使用,這時需要傳入一個設置對象,用來說明如何構造XHR對象。

$http({

method:'GET',

url:'/api/users.json',

params:{

'username':'tan'

});

其中設置對象可以包含以下主要的鍵:
①method
可以是:GET/DELETE/HEAD/JSONP/POST/PUT

②url:絕對的或者相對的請求目標
③params(字元串map或者對象)
這個鍵的值是一個字元串map或對象,會被轉換成查詢字元串追加在URL後面。如果值不是字元串,會被JSON序列化。
比如這個:

//參數會轉為看name=ari的形式
$http({
params:{'name':'ari'}
});

④data(字元串或者對象)
這個對象中包含了將會被當作消息體發送給伺服器的數據。通常在發送POST請求時使用。

從AngularJS 1.3開始,它還可以在POST請求里發送二進制數據。要發送一個blob對象,你可以簡單地通過使用data參數來傳遞它。
例如:

var blob=new Blob(['Hello world'],{type:'text/plain'});

$http({

method:'POST',

url:'/',

data:blob

});
4、響應對象

AngularJS傳遞給then()方法的響應對象包含了四個屬性。
◇data
這個數據代表轉換過後的響應體(如果定義了轉換的話)
◇status
響應的HTTP狀態碼
◇headers
這個函數是頭信息的getter函數,可以接受一個參數,用來獲取對應名字值

例如,用如下代碼獲取X-Auth-ID的值:

$http({

method: 'GET',

url: '/api/users.json'

}).then (resp) {

// 讀取X-Auth-ID

resp.headers('X-Auth-ID');

});
◇config
這個對象是用來生成原始請求的完整設置對象。

◇statusText(字元串)
這個字元串是響應的HTTP狀態文本。

5、緩存HTTP請求
默認情況下,$http服務不會對請求進行本地緩存。在發送單獨的請求時,我們可以通過向$http請求傳入一個布爾值或者一個緩存實例來啟用緩存。
$http.get('/api/users.json',{ cache: true })
.success(function(data) {})
.error(function(data) {});

第一次發送請求時,$http服務會向/api/users.json發送一個GET請求。第二次發送同一個GET請求時,$http服務會從緩存中取回請求的結果,而不會真的發送一個HTTP GET請求。
在這個例子里,由於設置了啟用緩存,AngularJS默認會使用$cacheFactory,這個服務是AngularJS在啟動時自動創建的。

如果想要對AngularJS使用的緩存進行更多的自定義控制,可以向請求傳入一個自定義的緩存實例代替true。

『玖』 Service和Factory等的區別

service 服務的意思,主要提供一些沒有實物的東西,如軟體,物流等。
factory 工廠的意思,主要是生產製造加工一些實物性的東西。
單詞意思不同,Service 指公共事業服務機構,Factory 指專事製造的工廠。
service 英[ˈsɜ:vɪs] 美[ˈsɜ:rvɪs]
n. 服役; 服務,服侍; 服務業; 維修服務;
vt. 檢修,維修; 向…提供服務; 保養; 滿足需要;
adj. 服務性的; 耐用的; 服現役的;
[例句]Britain still boasts the cheapest postal service
英國仍擁有最便宜的郵政服務系統。
[其他] 第三人稱單數:services 復數:services 現在分詞:servicing過去式:serviced 過去分詞:serviced
factory 英[ˈfæktri] 美[ˈfæktəri]
n. 工廠,製造廠; <古>代理店;
[例句]He owned furniture factories in New York State.
他在紐約州有幾家傢具廠。
[其他] 復數:factories
Service
它是一個可注入的構造器,在AngularJS中它是單例的,用它在Controller中通信或者共享數據都很合適
var app = angular.mole('app' ,[]);

app.config(function ($provide) {
$provide.service('movie', function () {
this.title = 'The Matrix';
});
});

app.controller('ctrl', function (movie) {
expect(movie.title).toEqual('The Matrix');
});

語法糖:
app.service('movie', function () {
this.title = 'The Matrix';
});

在service裡面可以不用返回東西,因為AngularJS會調用new關鍵字來創建對象。但是返回一個自定義對象好像也不會出錯。
Factory
它是一個可注入的function,它和service的區別就是:factory是普通function,而service是一個構造器(constructor),這樣Angular在調用service時會用new關鍵字,而調用factory時只是調用普通的function,所以factory可以返回任何東西,而service可以不返回(可查閱new關鍵字的作用)
var app = angular.mole('app', []);

app.config(function ($provide) {
$provide.factory('movie', function () {
return {
title: 'The Matrix';
}
});
});

app.controller('ctrl', function (movie) {
expect(movie.title).toEqual('The Matrix');

『拾』 angularjs 判斷對象是否為空

在AngularJs中判斷對象是否為空,可以使用angular.equals,如下:

閱讀全文

與anjularjs創建對象相關的資料

熱點內容
ps入門必備文件 瀏覽:348
以前的相親網站怎麼沒有了 瀏覽:15
蘋果6耳機聽歌有滋滋聲 瀏覽:768
怎麼徹底刪除linux文件 瀏覽:379
編程中字體的顏色是什麼意思 瀏覽:534
網站關鍵詞多少個字元 瀏覽:917
匯川am系列用什麼編程 瀏覽:41
筆記本win10我的電腦在哪裡打開攝像頭 瀏覽:827
醫院單位基本工資去哪個app查詢 瀏覽:18
css源碼應該用什麼文件 瀏覽:915
編程ts是什麼意思呢 瀏覽:509
c盤cad佔用空間的文件 瀏覽:89
不銹鋼大小頭模具如何編程 瀏覽:972
什麼格式的配置文件比較主流 瀏覽:984
增加目錄word 瀏覽:5
提取不相鄰兩列數據如何做圖表 瀏覽:45
r9s支持的網路制式 瀏覽:633
什麼是提交事務的編程 瀏覽:237
win10打字卡住 瀏覽:774
linux普通用戶關機 瀏覽:114

友情鏈接