詳解Angular中的自定義服務(wù)Service、Provider以及Factory
背景來(lái)源于前段時(shí)間的一場(chǎng)面試,面試官看著我Angular控制器中添加各種功能重復(fù)的方法,臉都發(fā)綠了,不過(guò)還是耐心地跟我指出提高Angular代碼復(fù)用性需要Service、Provider和Factory三種復(fù)用性很高的方法,遂習(xí)之,以下是我的學(xué)習(xí)成果:
先說(shuō)說(shuō)Factory:
通過(guò)注冊(cè).factory('my注冊(cè)名',方法()),返回一個(gè)對(duì)象,你就能在控制器中引入這個(gè)方法并訪問(wèn)這個(gè)對(duì)象:
例子:
<!-- factory模式 -->
<div ng-controller="theFactoryCtrl">
<h3>Factory模式</h3>
<ul>
<li ng-repeat="i in names">
{{i}}
</li>
</ul>
</div>
JS代碼:
/*工廠模式,注入?yún)?shù)中調(diào)用的是這個(gè)函數(shù)里的返回值*/
app.factory("myFactory",function(){
var args = arguments;
var obj = {}
obj.exec = function(){
var arr = [];
for(let i = 0; i<arguments.length; i++){
arr.push(arguments[i]);
}
return arr;
}
return obj;
})
app.controller("theFactoryCtrl",function ($scope,myFactory) {
$scope.names = myFactory.exec("張三的歌","趙四的舞","老王賊六");
})
效果:

Service:
在service使用構(gòu)造函數(shù)的方法去用它,在控制器中是以new的方式引入,所以可以調(diào)用service中定義的屬性
HTML:
<!-- service模式 -->
<div ng-controller="theServiceCtrl">
<h3>Service模式</h3>
<p>prop:{{prop}}</p>
<p>num:{{num}}</p>
</div>JS:
app.controller("theServiceCtrl",function($scope,myService){
$scope.prop = myService.prop("呵呵");
$scope.num = myService.num;
})
/*Service是new出來(lái)的,所以可以直接調(diào)用里面的屬性*/
app.service("myService",function(){
this.num = Math.floor(Math.random()*10);//0到10的隨機(jī)數(shù)
this.prop = function(arg){
return arg;
};
})效果:

Provider:
如果你想在創(chuàng)建服務(wù)之前先對(duì)服務(wù)進(jìn)行配置,那么你需要provider,因?yàn)閜rovider可以通過(guò)定義config,并在$get中訪問(wèn)config
HTML:
<!-- provider模式 -->
<div ng-controller="theProviderCtrl">
<h3>Provider模式</h3>
<p>姓名:{{info.name}}</p>
<p>部隊(duì):{{info.squad}}</p>
<p>職務(wù):{{info.role}}</p>
</div>JS:
/*使用$get方法關(guān)聯(lián)對(duì)應(yīng)的config*/
app.provider("myProvider",function(){
this.$get = function(){
return {
name : "朱子明",
squad : "保衛(wèi)員",
role : this.roleSet
}
}
})
/*名字必須符合規(guī)范:xxxxxxProvider*/
app.config(function(myProviderProvider){
myProviderProvider.roleSet = "保衛(wèi)干事"
})
app.controller("theProviderCtrl",function($scope,myProvider){
$scope.info = {
name : myProvider.name,
squad : myProvider.squad,
role : myProvider.role
}
})
效果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Angular2 自定義表單驗(yàn)證器的實(shí)現(xiàn)方法
這篇文章主要介紹了Angular2 自定義表單驗(yàn)證器的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
AngularJS 與Bootstrap實(shí)現(xiàn)表格分頁(yè)實(shí)例代碼
這篇文章主要介紹了AngularJS 與Bootstrap實(shí)現(xiàn)表格分頁(yè)的相關(guān)資料,并附實(shí)例代碼和實(shí)現(xiàn)效果圖,需要的朋友可以參考下2016-10-10
Angular4項(xiàng)目中添加i18n國(guó)際化插件ngx-translate的步驟詳解
這篇文章主要跟大家介紹了關(guān)于Angular4項(xiàng)目中添加i18n國(guó)際化插件ngx-translate的步驟,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-07-07
掌握Queries設(shè)計(jì)模式優(yōu)化Angular應(yīng)用開(kāi)發(fā)技巧
這篇文章主要介紹了掌握Queries設(shè)計(jì)模式優(yōu)化Angular應(yīng)用開(kāi)發(fā)的技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
詳解如何為你的angular app構(gòu)建一個(gè)第三方庫(kù)
這篇文章主要介紹了詳解如何為你的angular app構(gòu)建一個(gè)第三方庫(kù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
詳解angular2.x創(chuàng)建項(xiàng)目入門指令
這篇文章主要介紹了詳解angular2.x創(chuàng)建項(xiàng)目入門指令,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
Angular懶加載模塊與Combined?Injector原理全面解析
這篇文章主要為大家介紹了Angular懶加載模塊與Combined?Injector原理全面解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10

