javascript 的mvc框架
- jQuery就是其中的一個(gè)類(lèi)庫(kù),也就是函數(shù)的集合机蔗。你的代碼起主導(dǎo)作用剩盒,并且決定何時(shí)調(diào)用類(lèi)庫(kù)的方法。主要是封裝簡(jiǎn)化dom操作台夺。
- 但是像游戲開(kāi)發(fā)之類(lèi)對(duì)DOM進(jìn)行大量操縱径玖、又或者單純需要 極高運(yùn)行速度的應(yīng)用,就不是AngularJS的用武之地了
- angularjs 是一個(gè)js的結(jié)構(gòu)化框架颤介,它的重點(diǎn)不再是找dom元素梳星,而是頁(yè)面中的動(dòng)態(tài)數(shù)據(jù)
AngularJS 通過(guò) 指令(directive) 擴(kuò)展了 HTML,且通過(guò) 表達(dá)式 綁定數(shù)據(jù)到 HTML滚朵。
使用:
- 導(dǎo)入angularjs框架
- 創(chuàng)建模塊對(duì)象 app
var app = angular.module('myApp', []);
angular.module參數(shù):
第一個(gè)是模塊名冤灾,也是ng-app綁定的
第二個(gè):模塊的依賴(lài)部分
3.生成作用域?qū)ο?/p>
var app = angular.module('myApp', []);
app.controller('myCtrl1', function($scope) {//顯式聲明注入$scope
$scope.firstName1 = "John";
$scope.lastName2 = "Doe";
});
app.controller('myCtrl2', function($scope) {
$scope.firstName2 = "John";
$scope.lastName2 = "Doe";
});
返回值是作用域?qū)ο?controlle(控制器名,conductor)
conductor就是構(gòu)造函數(shù)辕近,所以一定要傳遞$scope參數(shù)
優(yōu)化:
問(wèn)題:js的代碼正式發(fā)布會(huì)壓縮韵吨,所以形參$scope會(huì)被abc代替,angular解析不了移宅,使用數(shù)組來(lái)解決归粉,壓縮后angular會(huì)找數(shù)組的第一個(gè)參數(shù),并且使用鏈?zhǔn)秸{(diào)用來(lái)優(yōu)化代碼漏峰,提高執(zhí)行速度
angular.module('myApp', []).controller('myCtrl', [$scope,function($scope) {
$scope.firstName = "John";
$scope.lastName = "Doe";
}]).controller('myCtrl2', [$scope,function($scope) { //隱式聲明注入$scope
$scope.firstName2 = "John";
$scope.lastName2 = "Doe";
}]);
開(kāi)發(fā)的兩種模式
- 命令式
更注重執(zhí)行的過(guò)程
for 循環(huán)
類(lèi)似解答題 - 聲明式
更注重執(zhí)行的結(jié)果
使用map進(jìn)行循環(huán)
聲明式是對(duì)命令式的局部包裝
類(lèi)似于選擇題
概念
MVC
Model(模型), 當(dāng)前視圖中可用的數(shù)據(jù)糠悼。
View(視圖), 即 HTML。(angularjs的指令與表達(dá)式)
Controller(控制器), 即 JavaScript 函數(shù)浅乔,可以添加或修改屬性倔喂。
Model(模型層):
應(yīng)用程序中用于處理數(shù)據(jù)的部分,(包括將數(shù)據(jù)保存或者修改到數(shù)據(jù)庫(kù)靖苇、變量滴劲、文件中)。在AngularJS中顾复,Model特指的是應(yīng)用程序中的各種數(shù)據(jù)。 可以看做作用域?qū)ο?/p>
View(視圖層):
用戶可以看到的用戶顯示數(shù)據(jù)的頁(yè)面鲁捏。
Controller(控制器):
控制器是連接View和Model的橋梁芯砸,負(fù)責(zé)從View讀取數(shù)據(jù),接受用戶的操作輸入给梅;并將數(shù)據(jù)發(fā)送給Model層假丧。Model層對(duì)數(shù)據(jù)處理完畢后,將結(jié)果返回給Controller动羽,Controller再將結(jié)果返回給View層顯示包帚。
使用
1. 導(dǎo)入ng1的框架
2. 聲明ng應(yīng)用程序
3.使用豐富的ng指令(屬性)編寫(xiě)代碼
- 模板(Template) 帶有Angular擴(kuò)展標(biāo)記的HTML
- 指令(Directive) 用于通過(guò)自定義屬性和元素?cái)U(kuò)展HTML的行為
- 模型(Model) 用于顯示給用戶并且與用戶互動(dòng)的數(shù)據(jù)
- 作用域(Scope) 用來(lái)存儲(chǔ)模型(Model)的語(yǔ)境(context)。模型放在這個(gè)語(yǔ)境中才能被控制器运吓、指令和表達(dá)式等訪問(wèn)到
6.表達(dá)式(Expression) 模板中可以通過(guò)它來(lái)訪問(wèn)作用域(Scope)中的變量和函數(shù)
編譯器(Compiler) 用來(lái)編譯模板(Template)渴邦,并且對(duì)其中包含的指令(Directive)和表達(dá)式(Expression)進(jìn)行實(shí)例化 - 過(guò)濾器(Filter) 負(fù)責(zé)格式化表達(dá)式(Expression)的值疯趟,以便呈現(xiàn)給用戶
- 視圖(View) 用戶看到的內(nèi)容(即DOM)
- 數(shù)據(jù)綁定(Data Binding) 自動(dòng)同步模型(Model)中的數(shù)據(jù)和視圖(View)表現(xiàn)
10.控制器(Controller) 視圖(View)背后的業(yè)務(wù)邏輯
11.依賴(lài)注入(Dependency Injection) 負(fù)責(zé)創(chuàng)建和自動(dòng)裝載對(duì)象或函數(shù) - 注入器(Injector) 用來(lái)實(shí)現(xiàn)依賴(lài)注入(Injection)的容器
13.模塊(Module) 用來(lái)配置注入器
14.服務(wù)(Service) 獨(dú)立于視圖(View)的、可復(fù)用的業(yè)務(wù)邏輯
特性
AngularJS 可以構(gòu)建一個(gè)單一頁(yè)面應(yīng)用程序(SPAs:Single Page Applications)谋梭。所有活動(dòng)局限在一個(gè)頁(yè)面上
當(dāng)前頁(yè)面的部分?jǐn)?shù)據(jù)變化不會(huì)刷新整個(gè)頁(yè)面 而是局部刷新利用ajax的技術(shù) 路由
優(yōu)點(diǎn)
雙向數(shù)據(jù)綁定
聲明式依賴(lài)注入
解耦應(yīng)用邏輯信峻、數(shù)據(jù)模型、視圖
完善的頁(yè)面指令
定制的表單驗(yàn)證
Ajax封裝
表達(dá)式
AngularJS使用{{}}綁定表達(dá)式瓮床。用于將表達(dá)式的內(nèi)容輸出到頁(yè)面中盹舞。表達(dá)式中可以是文字、運(yùn)算符隘庄、變量等踢步,也可以在表達(dá)式中進(jìn)行運(yùn)算輸出結(jié)果。
作用:就是顯示數(shù)據(jù) 從當(dāng)前作用域?qū)ο蟮闹付▽傩悦腥?就是ng-model定義的變量
實(shí)質(zhì)數(shù)據(jù)時(shí)從內(nèi)存流過(guò)來(lái)的丑掺,因?yàn)橹付ǖ膶傩晕挥趦?nèi)存中
語(yǔ)法:{{expression}} 作用:顯示表達(dá)式的結(jié)果數(shù)據(jù) 表達(dá)式是只讀的
表達(dá)式引用的變量必須是當(dāng)前作用域?qū)ο笥械膶傩?(包括其原型屬性)
expresion:
- 基本數(shù)據(jù)類(lèi)型 number boolean string
- undefined Infinity NaN null 都會(huì)解析為空串 不顯示任何數(shù)據(jù)
- 對(duì)象的屬性或者方法
所以在{{}}中有一個(gè)不存在的變量 頁(yè)面什么也不會(huì)顯示 是因?yàn)閷傩圆淮嬖跁?huì)返回undefined - 數(shù)組
雙向數(shù)據(jù)綁定
數(shù)據(jù)綁定:數(shù)據(jù)從A流向B
頁(yè)面與ng內(nèi)存:
ng-model(雙向數(shù)據(jù)綁定)頁(yè)面的數(shù)據(jù)自動(dòng)流到內(nèi)存中去 view----model
同時(shí)可以在頁(yè)面立刻顯示數(shù)據(jù) 當(dāng)改變view的數(shù)據(jù)获印,也會(huì)改變?cè)贛ODEL中的屬性
{{}}表達(dá)式:model-----view 單向數(shù)據(jù)綁定(最終顯示在頁(yè)面)
在model域中的對(duì)象中修改屬性值的時(shí)候,在頁(yè)面的數(shù)據(jù)也會(huì)隨之改變
ng-init :view----model單向數(shù)據(jù)綁定(最終顯示在內(nèi)存)
傳統(tǒng)的數(shù)據(jù)綁定是單向綁定吼鱼,數(shù)據(jù)只能從model和controller生成需要的html蓬豁,但是不能返過(guò)來(lái)使用。只是單方向的菇肃。雙向數(shù)據(jù)綁定:也就是說(shuō)我在前面填寫(xiě)地粪,后面直接生成代碼,將填寫(xiě)的顯示出來(lái)琐谤。雙向的意思就是如果view修改了屬性值蟆技,那么model機(jī)會(huì)看到這個(gè)改變。相反也是一樣的斗忌。
作用域
rootScope根作用域?qū)ο蟆?ng-app會(huì)自動(dòng)產(chǎn)生根作用域?qū)ο?br> 這個(gè)對(duì)象的屬性與方法與頁(yè)面中指令或表達(dá)式是關(guān)聯(lián)的
聲明在rootScope上的屬性和方法质礼,可以在整個(gè)ng-app所包含的范圍使用。Scope作用域?qū)ο?聲明在Scope,它是rootScope的子對(duì)象唧躲,要在控制器函數(shù)中聲明Scope
如果沒(méi)有使用scope上。
2肛真、如果ng-model沒(méi)有寫(xiě)在任何一個(gè)controller中谐丢,則這個(gè)變量會(huì)默認(rèn)綁定到$rootScope 上。
父子作用域:
1、AngularJS中乾忱,子作用域只能訪問(wèn)父作用域中的變量讥珍,而不能修改父作用域的變量。
2饭耳、為了解決上述問(wèn)題串述,可以將父作用域中的變量聲明為引用數(shù)據(jù)類(lèi)型,例如對(duì)象等寞肖。
這樣可以在子作用域中纲酗,直接修改對(duì)象的屬性,而不需要修改對(duì)象本身保存的地址新蟆。
依賴(lài)注入
- 依賴(lài)對(duì)象
完成某個(gè)特定功能需要某個(gè)對(duì)象才能完成觅赊,這個(gè)對(duì)象就是依賴(lài)對(duì)象.事件里的event對(duì)象
比如angularjs里的$scope對(duì)象就是依賴(lài)對(duì)象,并且是依賴(lài)注入的形式使用的
注意:在angular里必須使用該方式琼稻,形參必須是這種特定的名稱(chēng)吮螺,否則無(wú)法注入,會(huì)拋異常
2依賴(lài)注入
依賴(lài)的對(duì)象是以形參的形式被注入使用的帕翻,這種方式稱(chēng)為聲明式依賴(lài)植入
var Mymdule=angular.module("MyApp",[])
Angular將常用的功能封裝到Angular.js鸠补,創(chuàng)建主模塊時(shí)直接可以使用,無(wú)需注入而一些應(yīng)用較少的功能嘀掸,需要導(dǎo)入對(duì)應(yīng)的JS文件紫岩,并且在[]中注入進(jìn)這個(gè)模塊,才能夠使用睬塌。這就是AngularJS中的【【依賴(lài)注入】泉蝌!
模塊對(duì)象:
angular對(duì)應(yīng)的函數(shù):
var Mymdule=angular.module("MyApp",[])
對(duì)象對(duì)應(yīng)的方法:
Mymdule.controller('mycontroller',function($scope){})
angularjs的模塊
AngularJS 模塊(Module) 定義了 AngularJS 應(yīng)用。
可以通過(guò) AngularJS 的 angular.module 函數(shù)來(lái)創(chuàng)建模塊:
angularjs的控制器
過(guò)濾器
過(guò)濾器可以使用一個(gè)管道字符(|)添加到表達(dá)式和指令中揩晴。
currency 將數(shù)字格式化為貨幣格式
filter 從數(shù)組項(xiàng)中選擇一個(gè)子集
lowercase 格式化字符串為小寫(xiě)
orderBy 根據(jù)某個(gè)表達(dá)式排列數(shù)組
uppercase 格式化字符串為大寫(xiě)
自定義過(guò)濾器:
概念
MVC
Model(模型), 當(dāng)前視圖中可用的數(shù)據(jù)勋陪。
View(視圖), 即 HTML。(angularjs的指令與表達(dá)式)
Controller(控制器), 即 JavaScript 函數(shù)硫兰,可以添加或修改屬性诅愚。
Model(模型層):
應(yīng)用程序中用于處理數(shù)據(jù)的部分,(包括將數(shù)據(jù)保存或者修改到數(shù)據(jù)庫(kù)劫映、變量呻粹、文件中)。在AngularJS中苏研,Model特指的是應(yīng)用程序中的各種數(shù)據(jù)。 可以看做作用域?qū)ο?/p>
View(視圖層):
用戶可以看到的用戶顯示數(shù)據(jù)的頁(yè)面腮郊。
Controller(控制器):
控制器是連接View和Model的橋梁摹蘑,負(fù)責(zé)從View讀取數(shù)據(jù),接受用戶的操作輸入轧飞;并將數(shù)據(jù)發(fā)送給Model層衅鹿。Model層對(duì)數(shù)據(jù)處理完畢后撒踪,將結(jié)果返回給Controller,Controller再將結(jié)果返回給View層顯示大渤。
使用
1. 導(dǎo)入ng1的框架
2. 聲明ng應(yīng)用程序
3.使用豐富的ng指令(屬性)編寫(xiě)代碼
- 模板(Template) 帶有Angular擴(kuò)展標(biāo)記的HTML
- 指令(Directive) 用于通過(guò)自定義屬性和元素?cái)U(kuò)展HTML的行為
- 模型(Model) 用于顯示給用戶并且與用戶互動(dòng)的數(shù)據(jù)
- 作用域(Scope) 用來(lái)存儲(chǔ)模型(Model)的語(yǔ)境(context)制妄。模型放在這個(gè)語(yǔ)境中才能被控制器、指令和表達(dá)式等訪問(wèn)到
6.表達(dá)式(Expression) 模板中可以通過(guò)它來(lái)訪問(wèn)作用域(Scope)中的變量和函數(shù)
編譯器(Compiler) 用來(lái)編譯模板(Template)泵三,并且對(duì)其中包含的指令(Directive)和表達(dá)式(Expression)進(jìn)行實(shí)例化 - 過(guò)濾器(Filter) 負(fù)責(zé)格式化表達(dá)式(Expression)的值耕捞,以便呈現(xiàn)給用戶
- 視圖(View) 用戶看到的內(nèi)容(即DOM)
- 數(shù)據(jù)綁定(Data Binding) 自動(dòng)同步模型(Model)中的數(shù)據(jù)和視圖(View)表現(xiàn)
10.控制器(Controller) 視圖(View)背后的業(yè)務(wù)邏輯
11.依賴(lài)注入(Dependency Injection) 負(fù)責(zé)創(chuàng)建和自動(dòng)裝載對(duì)象或函數(shù) - 注入器(Injector) 用來(lái)實(shí)現(xiàn)依賴(lài)注入(Injection)的容器
13.模塊(Module) 用來(lái)配置注入器
14.服務(wù)(Service) 獨(dú)立于視圖(View)的、可復(fù)用的業(yè)務(wù)邏輯
特性
AngularJS 可以構(gòu)建一個(gè)單一頁(yè)面應(yīng)用程序(SPAs:Single Page Applications)烫幕。所有活動(dòng)局限在一個(gè)頁(yè)面上
當(dāng)前頁(yè)面的部分?jǐn)?shù)據(jù)變化不會(huì)刷新整個(gè)頁(yè)面 而是局部刷新利用ajax的技術(shù) 路由
優(yōu)點(diǎn)
雙向數(shù)據(jù)綁定
聲明式依賴(lài)注入
解耦應(yīng)用邏輯俺抽、數(shù)據(jù)模型、視圖
完善的頁(yè)面指令
定制的表單驗(yàn)證
Ajax封裝
表達(dá)式
AngularJS使用{{}}綁定表達(dá)式较曼。用于將表達(dá)式的內(nèi)容輸出到頁(yè)面中磷斧。表達(dá)式中可以是文字、運(yùn)算符捷犹、變量等弛饭,也可以在表達(dá)式中進(jìn)行運(yùn)算輸出結(jié)果。
作用:就是顯示數(shù)據(jù) 從當(dāng)前作用域?qū)ο蟮闹付▽傩悦腥?就是ng-model定義的變量
實(shí)質(zhì)數(shù)據(jù)時(shí)從內(nèi)存流過(guò)來(lái)的萍歉,因?yàn)橹付ǖ膶傩晕挥趦?nèi)存中
雙向數(shù)據(jù)綁定
數(shù)據(jù)綁定:數(shù)據(jù)從A流向B
頁(yè)面與ng內(nèi)存:
ng-model(雙向數(shù)據(jù)綁定)頁(yè)面的數(shù)據(jù)自動(dòng)流到內(nèi)存中去 view----model
同時(shí)可以在頁(yè)面立刻顯示數(shù)據(jù) 當(dāng)改變view的數(shù)據(jù)侣颂,也會(huì)改變?cè)贛ODEL中的屬性
{{}}表達(dá)式:model-----view 單向數(shù)據(jù)綁定(最終顯示在頁(yè)面)
在model域中的對(duì)象中修改屬性值的時(shí)候,在頁(yè)面的數(shù)據(jù)也會(huì)隨之改變
ng-init :view----model單向數(shù)據(jù)綁定(最終顯示在內(nèi)存)
作用域
rootScope根作用域?qū)ο蟆?ng-app會(huì)自動(dòng)產(chǎn)生根作用域?qū)ο?br> 這個(gè)對(duì)象的屬性與方法與頁(yè)面中指令或表達(dá)式是關(guān)聯(lián)的
聲明在rootScope上的屬性和方法翠桦,可以在整個(gè)ng-app所包含的范圍使用横蜒。Scope作用域?qū)ο?聲明在Scope丛晌,它是rootScope的子對(duì)象,要在控制器函數(shù)中聲明Scope
如果沒(méi)有使用scope上谋逻。
2、如果ng-model沒(méi)有寫(xiě)在任何一個(gè)controller中桐经,則這個(gè)變量會(huì)默認(rèn)綁定到$rootScope 上毁兆。
模塊
模塊化就是一系列函數(shù)的集合,當(dāng)應(yīng)用被啟動(dòng)時(shí)阴挣,這些函數(shù)就會(huì)被執(zhí)行气堕。主要利用angular.module來(lái)定義模塊。也是Angular.js的亮點(diǎn)。
模塊對(duì)象:使用Angular.module來(lái)創(chuàng)建
var Mymdule=angular.module("MyApp",[])
參數(shù):模塊名 依賴(lài)的模塊
使用該對(duì)象對(duì)應(yīng)的方法生成作用域?qū)ο螅?br>
controller(名稱(chēng), constructor);
Mymdule.controller('mycontroller',function($scope){})
來(lái)取締構(gòu)造函數(shù)的那個(gè)做法(ng-controller)
事件監(jiān)聽(tīng)
NG框架中通過(guò)對(duì)元素標(biāo)簽添加【ng-事件名】指令茎芭,來(lái)對(duì)元素添加事件監(jiān)聽(tīng)揖膜,事件監(jiān)聽(tīng)的回調(diào)函數(shù)需要定義在controller中,通過(guò)scope.回調(diào)函數(shù)名=function(形參){
在函數(shù)中形參就是傳入的NG變量的值
}
···
服務(wù) service 運(yùn)行在服務(wù)器家阿爾賣(mài)弄
在 AngularJS 中壹粟,服務(wù)是一個(gè)函數(shù)或?qū)ο螅褂梅?wù)需要提前注入.
之前出現(xiàn)的服務(wù)包括watch以及 apply filterinterval
相當(dāng)于app提供給用戶使用的全局變量趁仙,服務(wù)存在的目的,是對(duì)每個(gè)controller功能的一個(gè)擴(kuò)展犀呼。
出現(xiàn)原因:
因?yàn)樽饔糜虻脑蛐宜骸8鱾€(gè)控制器之間的變量時(shí)無(wú)法訪問(wèn)的,通過(guò)在控制器中注入服務(wù)來(lái)實(shí)現(xiàn)平級(jí)的控制器的交互外臂。
1.系統(tǒng)內(nèi)置的服務(wù)坐儿,統(tǒng)一使用http:向服務(wù)器發(fā)送請(qǐng)求赘艳,讀取遠(yuǎn)程服務(wù)器的內(nèi)容酌毡,類(lèi)似于JQuery中的Ajax;
語(yǔ)法:
$http({
method:'GET',
url:'22_service.php'
}).sucess(function(data){
console.log(data)
}).error(function(err){
console.log(err)
})
這里類(lèi)似于jquery的ajax請(qǐng)求,為了節(jié)省多次請(qǐng)求蕾管,會(huì)設(shè)置延遲
對(duì)controller注入了服務(wù)之后只是說(shuō)明在這個(gè)controller的腳本內(nèi)可以使用網(wǎng)絡(luò)請(qǐng)求枷踏,而不是已經(jīng)使用了請(qǐng)求,具體的網(wǎng)絡(luò)請(qǐng)求還需要我們自己定義掰曾。
timeout:相當(dāng)于setTimeout()
anchorScroll 與哈希值關(guān)聯(lián)
log
$interpolate
服務(wù)的配置(供應(yīng)商)
就是對(duì)服務(wù)進(jìn)行初始化操作。服務(wù)名+Provider秒梅。
語(yǔ)法:
模型.config(["服務(wù)名+Provider){
$服務(wù)名+Provider.方法(參數(shù))
}])
自定義服務(wù)
為了與系統(tǒng)的服務(wù)相區(qū)分旗芬。我們自定義的服務(wù)不使用$前綴符號(hào)。
接收兩個(gè)參數(shù):第一個(gè)參數(shù)是服務(wù)名:第二個(gè)參數(shù)是自定義服務(wù)的構(gòu)造函數(shù)捆蜀。 我們自定義的服務(wù)岗屏,本質(zhì)是一個(gè)對(duì)象辆琅。
對(duì)象的屬性 ,可以在構(gòu)造函數(shù)中这刷,使用this.屬性 表示;
對(duì)象的方法 娩井,可以在構(gòu)造函數(shù)中暇屋,使用this.方法 表示;provider服務(wù)
在AngularJs中洞辣,service服務(wù)和 fantory服務(wù)都是基于provider服務(wù)實(shí)現(xiàn)的咐刨。
在定義provider時(shí),可以使用this.$get方法扬霜,接受一個(gè)函數(shù)定鸟,函數(shù)里面采用與factory完全相同的寫(xiě)法
<!DOCTYPE html >
<html ng-app="myApp">
<meta charset="utf-8">
<script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>
<title ng-controller="maincontroller">{{mytitle}}</title>
<body>
<div ng-controller="myCtrl1">
</div>
<script>
var app = angular.module('myApp', []);
app.provider("myprovideservice",function(){
//與factory的不同在多了一個(gè)return以及$GET
return{
$get:function(){
return{
name:'hello',
show:function(){
return this.name+":angular"
},
myrandom:function(number1,nummber2){
return Math.random()*(nummber2-number1)+number1
},
};
}
}
})
app.controller('maincontroller',function($scope) {
$scope.mytitle="provider-service"
});
app.controller('myCtrl1', ['$scope','myprovideservice',function($scope,myprovideservice) {
console.log(myprovideservice.show())
console.log(myprovideservice.myrandom(3,9))
console.log(myprovideservice(3,9))
}]);
</script>
</body>
</html>
service服務(wù)
factory服務(wù)
<!DOCTYPE html >
<html ng-app="myApp">
<meta charset="utf-8">
<script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>
<title ng-controller="maincontroller">{{mytitle}}</title>
<body>
<div ng-controller="myCtrl1">
</div>
<script>
var app = angular.module('myApp', []);
app.factory("myfactoryservice",function(){
/// 返回一個(gè)對(duì)象。調(diào)用對(duì)象的屬性以及方法
// return{
// name:'hello',
// show:function(){
// return this.name+":angular"
// },
// };
//僅僅返回一個(gè)匿名函數(shù)著瓶,調(diào)用的時(shí)候使用服務(wù)名
return function(num1,num2){
return Math.random()*(num2-num1)+num1
}
})
app.controller('maincontroller',function($scope) {
$scope.mytitle="factory-service"
});
app.controller('myCtrl1', ['$scope','myfactoryservice',function($scope,myfactoryservice) {
// console.log(myfactoryservice.show())
console.log(myfactoryservice(3,9))
}]);
</script>
</body>
</html>
factory服務(wù)在使用上與service服務(wù)沒(méi)有太大差距联予。唯一的不同點(diǎn),是聲明服務(wù)時(shí)材原,factory服務(wù)是在函數(shù)中先聲明好一個(gè)對(duì)象沸久,然后使用return將對(duì)象返回。而service服務(wù)余蟹,則是直接在函數(shù)中使用this將屬性和方法添加到對(duì)象上面卷胯。
在三種服務(wù)中,provider服務(wù)是唯一可以寫(xiě)進(jìn)config配置階段的服務(wù)威酒。所以說(shuō)窑睁,如果服務(wù)需要在配置階段,也就是在聲明controller之前執(zhí)行的話葵孤,則可以使用provider担钮,否則一般使用service或者factory。
路由(由a標(biāo)簽的點(diǎn)擊跳轉(zhuǎn)功能延展而來(lái)的)
路由允許我們通過(guò)不同的 URL 訪問(wèn)不同的內(nèi)容佛呻。實(shí)現(xiàn)多視圖的單頁(yè) Web 應(yīng)用(single page web application裳朋,SPA)。
使用路由:
1.載入實(shí)現(xiàn)路由的 js 文件:angular-route.js吓著。
- 如果使用路由鲤嫡,必須在創(chuàng)建頁(yè)面的數(shù)據(jù)模型的時(shí)候,注入ngRoute 模塊作為主應(yīng)用模塊的依賴(lài)模塊绑莺。
angular.module('routingDemoApp',['ngRoute']) - 使用 ngView 指令暖眼。 ng-view提供標(biāo)注[顯示不同頁(yè)面容器] 的功能
- router的實(shí)現(xiàn)需要依賴(lài)a標(biāo)簽的href屬性
href="#+要加載的頁(yè)面的代號(hào)" 這個(gè)屬性的作用,是當(dāng)用戶點(diǎn)擊鏈接時(shí)纺裁,通知路由加載那個(gè)頁(yè)面诫肠。
4.配置 routeProvider 定義路由規(guī)則。
具體使用:
通過(guò)數(shù)據(jù)模型的config方法創(chuàng)建一個(gè)路由栋豫,通過(guò)路由的.when判斷加載哪一個(gè)頁(yè)面挤安,通過(guò).otherwise判斷默認(rèn)加載哪一個(gè)頁(yè)面
apm模型.config(['$routeProvider', function($routeProvider){
$routeProvider
.when('/頁(yè)面代號(hào)',{
template:'要加載的頁(yè)面的url地址,以路由地址為起點(diǎn)'丧鸯,
controler:'對(duì)應(yīng)頁(yè)面的控制器名稱(chēng)'
})
·····
.otherwise({
redirectTo:'/默認(rèn)加載頁(yè)面代號(hào)'
})
}]);
AngularJS 模塊的 config 函數(shù)用于配置路由規(guī)則蛤铜。通過(guò)使用 configAPI,我們請(qǐng)求把routeProvider.whenAPI來(lái)定義我們的路由規(guī)則丛肢。
$routeProvider 為我們提供了 when(path,object) & otherwise(object) 函數(shù)按順序定義所有路由围肥,函數(shù)包含兩個(gè)參數(shù):第一個(gè)參數(shù)是 URL 或者 URL 正則規(guī)則。第二個(gè)參數(shù)是路由配置對(duì)象蜂怎。