詳解Angular中的自定義服務Service、Provider以及Factory
背景來源于前段時間的一場面試,面試官看著我Angular控制器中添加各種功能重復的方法,臉都發(fā)綠了,不過還是耐心地跟我指出提高Angular代碼復用性需要Service、Provider和Factory三種復用性很高的方法,遂習之,以下是我的學習成果:
先說說Factory:
通過注冊.factory('my注冊名',方法()),返回一個對象,你就能在控制器中引入這個方法并訪問這個對象:
例子:
<!-- 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)用的是這個函數(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出來的,所以可以直接調(diào)用里面的屬性*/ app.service("myService",function(){ this.num = Math.floor(Math.random()*10);//0到10的隨機數(shù) this.prop = function(arg){ return arg; }; })
效果:
Provider:
如果你想在創(chuàng)建服務之前先對服務進行配置,那么你需要provider,因為provider可以通過定義config,并在$get中訪問config
HTML:
<!-- provider模式 --> <div ng-controller="theProviderCtrl"> <h3>Provider模式</h3> <p>姓名:{{info.name}}</p> <p>部隊:{{info.squad}}</p> <p>職務:{{info.role}}</p> </div>
JS:
/*使用$get方法關(guān)聯(lián)對應的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 } })
效果:
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Angularjs 實現(xiàn)移動端在線測評效果(推薦)
這篇文章主要介紹了Angularjs 實現(xiàn)移動端在線測評效果,需要的朋友可以參考下2017-04-04Angular 4 依賴注入學習教程之FactoryProvider的使用(四)
這篇文章主要給大家介紹了關(guān)于Angular 4 依賴注入之FactoryProvider使用的相關(guān)資料,文中介紹的非常詳細,對大家學習或者使用Angular4具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-06-06Angular JS數(shù)據(jù)的雙向綁定詳解及實例
這篇文章主要介紹了Angular JS數(shù)據(jù)的雙向綁定詳解及實例的相關(guān)資料,需要的朋友可以參考下2016-12-12AngularJS+Bootstrap3多級導航菜單的實現(xiàn)代碼
將介紹如何用AngularJS構(gòu)建一個強大的web前端系統(tǒng)。文章介紹如何實現(xiàn)多限級導航菜單。本文圖文并茂給大家介紹的非常詳細,感興趣的朋友參考下吧2017-08-08