ng 1

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滚朵。

使用:

  1. 導(dǎo)入angularjs框架
  2. 創(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ā)的兩種模式

  1. 命令式
    更注重執(zhí)行的過(guò)程
    for 循環(huán)
    類(lèi)似解答題
  2. 聲明式
    更注重執(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ě)代碼 

  1. 模板(Template) 帶有Angular擴(kuò)展標(biāo)記的HTML
  2. 指令(Directive) 用于通過(guò)自定義屬性和元素?cái)U(kuò)展HTML的行為
  3. 模型(Model) 用于顯示給用戶并且與用戶互動(dòng)的數(shù)據(jù)
  4. 作用域(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í)例化
  5. 過(guò)濾器(Filter) 負(fù)責(zé)格式化表達(dá)式(Expression)的值疯趟,以便呈現(xiàn)給用戶
  6. 視圖(View) 用戶看到的內(nèi)容(即DOM)
  7. 數(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ù)
  8. 注入器(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:

  1. 基本數(shù)據(jù)類(lèi)型 number boolean string
  2. undefined Infinity NaN null 都會(huì)解析為空串 不顯示任何數(shù)據(jù)
  3. 對(duì)象的屬性或者方法
    所以在{{}}中有一個(gè)不存在的變量 頁(yè)面什么也不會(huì)顯示 是因?yàn)閷傩圆淮嬖跁?huì)返回undefined
  4. 數(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è)改變。相反也是一樣的斗忌。

作用域

  1. rootScope根作用域?qū)ο蟆?ng-app會(huì)自動(dòng)產(chǎn)生根作用域?qū)ο?br> 這個(gè)對(duì)象的屬性與方法與頁(yè)面中指令或表達(dá)式是關(guān)聯(lián)的
    聲明在rootScope上的屬性和方法质礼,可以在整個(gè)ng-app所包含的范圍使用。

  2. Scope作用域?qū)ο?聲明在scope上的屬性和方法织阳。只能在當(dāng)前controller使用 ng-controller:指定控制器的構(gòu)造函數(shù) angular會(huì)自動(dòng)new此函數(shù)創(chuàng)建控制器對(duì)象眶蕉,同時(shí)angular中還有創(chuàng)建新的對(duì)象Scope,它是rootScope的子對(duì)象唧躲,要在控制器函數(shù)中聲明Scope形參造挽,angular會(huì)自動(dòng)傳入Scope

如果沒(méi)有使用scope聲明變量,而是直接使用ng-model在HTML標(biāo)簽中綁定的數(shù)據(jù)的作用域?yàn)椋?  1弄痹、如果 ng-model寫(xiě)在某個(gè)controller中饭入,則這個(gè)變量會(huì)默認(rèn)綁定到當(dāng)前的controller的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)注入

  1. 依賴(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ě)代碼 

  1. 模板(Template) 帶有Angular擴(kuò)展標(biāo)記的HTML
  2. 指令(Directive) 用于通過(guò)自定義屬性和元素?cái)U(kuò)展HTML的行為
  3. 模型(Model) 用于顯示給用戶并且與用戶互動(dòng)的數(shù)據(jù)
  4. 作用域(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í)例化
  5. 過(guò)濾器(Filter) 負(fù)責(zé)格式化表達(dá)式(Expression)的值耕捞,以便呈現(xiàn)給用戶
  6. 視圖(View) 用戶看到的內(nèi)容(即DOM)
  7. 數(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ù)
  8. 注入器(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)存)

作用域

  1. rootScope根作用域?qū)ο蟆?ng-app會(huì)自動(dòng)產(chǎn)生根作用域?qū)ο?br> 這個(gè)對(duì)象的屬性與方法與頁(yè)面中指令或表達(dá)式是關(guān)聯(lián)的
    聲明在rootScope上的屬性和方法翠桦,可以在整個(gè)ng-app所包含的范圍使用横蜒。

  2. Scope作用域?qū)ο?聲明在scope上的屬性和方法。 只能在當(dāng)前controller使用 ng-controller:指定控制器的構(gòu)造函數(shù) angular會(huì)自動(dòng)new此函數(shù)創(chuàng)建控制器對(duì)象销凑,同時(shí)angular中還有創(chuàng)建新的對(duì)象Scope丛晌,它是rootScope的子對(duì)象,要在控制器函數(shù)中聲明Scope形參斗幼,angular會(huì)自動(dòng)傳入Scope

如果沒(méi)有使用scope聲明變量澎蛛,而是直接使用ng-model在HTML標(biāo)簽中綁定的數(shù)據(jù)的作用域?yàn)椋?  1、如果 ng-model寫(xiě)在某個(gè)controller中蜕窿,則這個(gè)變量會(huì)默認(rèn)綁定到當(dāng)前的controller的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來(lái)實(shí)現(xiàn)梅桩。 整個(gè)過(guò)程類(lèi)似于http的事件 語(yǔ)法: <E ng-'事件名'='回調(diào)函數(shù)名(NG變量)'></E> ···scope.回調(diào)函數(shù)名=function(形參){
在函數(shù)中形參就是傳入的NG變量的值
}
···

服務(wù) service 運(yùn)行在服務(wù)器家阿爾賣(mài)弄

在 AngularJS 中壹粟,服務(wù)是一個(gè)函數(shù)或?qū)ο螅褂梅?wù)需要提前注入.

之前出現(xiàn)的服務(wù)包括scope宿百。以及scope里面的watch以及 apply timeoutfilterrootscopeinterval
相當(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)一使用開(kāi)頭,服務(wù)中的屬性和方法統(tǒng)一使用$$開(kāi)頭宋光。這些服務(wù)不需要自定義服務(wù)的內(nèi)容貌矿,而是需要直接注入到controllerg中,也就是說(shuō)罪佳,要使用服務(wù)逛漫,必須要把服務(wù)名通過(guò)controller的構(gòu)造函數(shù)的參數(shù)注入進(jìn)來(lái)。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)求還需要我們自己定義掰曾。
 location:返回當(dāng)前頁(yè)面的URL地址信息旭蠕,是一個(gè)對(duì)象; url:返回頁(yè)面的絕對(duì)地址 路徑:replace方法可以實(shí)現(xiàn)沒(méi)有歷史記錄旷坦,與路由合作 哈希值 serch :接收一個(gè)對(duì)象 可以設(shè)置的方法:search hash path 只能獲忍桶尽:protococl url port hosttimeout:相當(dāng)于setTimeout()
 interval:相當(dāng)于setInterval()anchorScroll 與哈希值關(guān)聯(lián)
cacheFactory 緩存相關(guān)
qlog
$interpolate

服務(wù)的配置(供應(yīng)商)

就是對(duì)服務(wù)進(jìn)行初始化操作。服務(wù)名+Provider秒梅。
語(yǔ)法:
模型.config(["服務(wù)名+Provider",function(服務(wù)名+Provider){
$服務(wù)名+Provider.方法(參數(shù))
}])

  1. 自定義服務(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.方法 表示;

  2. 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>
  1. service服務(wù)

  2. 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吓著。

  1. 如果使用路由鲤嫡,必須在創(chuàng)建頁(yè)面的數(shù)據(jù)模型的時(shí)候,注入ngRoute 模塊作為主應(yīng)用模塊的依賴(lài)模塊绑莺。
    angular.module('routingDemoApp',['ngRoute'])
  2. 使用 ngView 指令暖眼。 ng-view提供標(biāo)注[顯示不同頁(yè)面容器] 的功能
  3. router的實(shí)現(xiàn)需要依賴(lài)a標(biāo)簽的href屬性
    href="#+要加載的頁(yè)面的代號(hào)" 這個(gè)屬性的作用,是當(dāng)用戶點(diǎn)擊鏈接時(shí)纺裁,通知路由加載那個(gè)頁(yè)面诫肠。
    4.配置 routeProvider司澎,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注入到我們的配置函數(shù)并且使用routeProvider.whenAPI來(lái)定義我們的路由規(guī)則丛肢。
$routeProvider 為我們提供了 when(path,object) & otherwise(object) 函數(shù)按順序定義所有路由围肥,函數(shù)包含兩個(gè)參數(shù):第一個(gè)參數(shù)是 URL 或者 URL 正則規(guī)則。第二個(gè)參數(shù)是路由配置對(duì)象蜂怎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末穆刻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子杠步,更是在濱河造成了極大的恐慌氢伟,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篮愉,死亡現(xiàn)場(chǎng)離奇詭異腐芍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)试躏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)猪勇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人颠蕴,你說(shuō)我怎么就攤上這事泣刹。” “怎么了犀被?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵椅您,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我寡键,道長(zhǎng)掀泳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任西轩,我火速辦了婚禮员舵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘藕畔。我一直安慰自己马僻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布注服。 她就那樣靜靜地躺著韭邓,像睡著了一般措近。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上女淑,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天瞭郑,我揣著相機(jī)與錄音,去河邊找鬼鸭你。 笑死凰浮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苇本。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼菜拓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瓣窄!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起纳鼎,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤俺夕,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后贱鄙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體劝贸,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年逗宁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了映九。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瞎颗,死狀恐怖件甥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哼拔,我是刑警寧澤引有,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站倦逐,受9級(jí)特大地震影響譬正,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜檬姥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一曾我、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧穿铆,春花似錦您单、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)平酿。三九已至,卻和暖如春悦陋,著一層夾襖步出監(jiān)牢的瞬間蜈彼,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工俺驶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幸逆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓暮现,卻偏偏與公主長(zhǎng)得像还绘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子栖袋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容