angularJS Provider、factory、service詳解及實(shí)例代碼
factory
用 Factory 就是創(chuàng)建一個(gè)對象,為它添加屬性,然后把這個(gè)對象返回出來。你把 service 傳進(jìn) controller 之后,在 controller 里這個(gè)對象里的屬性就可以通過 factory 使用了。
app.controller('myFactoryCtrl', function($scope, myFactory){
$scope.artist = myFactory.getArtis();
});
app.factory('myFactory', function(){
var _artist = '';
var service = {};
service.getArtist = function(){
return _artist;
}
return service;
});
service
Service 是用"new"關(guān)鍵字實(shí)例化的。因此,你應(yīng)該給"this"添加屬性,然后 service 返回"this"。你把 service 傳進(jìn) controller 之后,在controller里 "this" 上的屬性就可以通過 service 來使用了。
app.controller('myFactoryCtrl', function($scope, myService){
$scope.artist = myService.getArtis();
});
app.service('myService', function(){
var _artist ='';
this.getArtist = function(){
return _artist;
}
});
provider
Providers 是唯一一種你可以傳進(jìn) .config() 函數(shù)的 service。當(dāng)你想要在 service 對象啟用之前,先進(jìn)行模塊范圍的配置,那就應(yīng)該用 provider。
app.controller('myProviderCtrl', function($scope, myProvider){
$scope.artist = myProvider.getArtist();
$scope.data.thingFromConfig = myProvider.thingOnConfig;
});
app.provider('myProvider', function(){
this._artist = '';
this.thingFromConfig = '';
this.$get = function(){
var that = this;
return {
getArtist: function(){
return that._artist;
},
thingOnConfig: that.thingFromConfig
}
}
});
app.config(function(myProviderProvider){
myProviderProvider.thingFromConfig = 'This was set in config()';
});
value和constant
$provide.value('myValue', 10);
$provide.constant('myConstant', 10);
/*
二者的區(qū)別:
1. value可以被修改,constant一旦聲明就無法修改
2. value不可以在config中注入,constant可以。
*/
provider、factory、service三者的關(guān)系
app.provider('myDate', {
$get: function() {
return new Date();
}
});
//可以寫成
app.factory('myDate', function(){
return new Date();
});
//可以寫成
app.service('myDate', Date);
總結(jié)
- 所有的供應(yīng)商都只被實(shí)例化一次,也就說他們都是單例的
- 除了constant,所有的供應(yīng)商都可以被裝飾器(decorator)裝飾
- value就是一個(gè)簡單的可注入的值
- service是一個(gè)可注入的構(gòu)造器
- factory是一個(gè)可注入的方法
- decorator可以修改或封裝其他的供應(yīng)商,當(dāng)然除了constant
- provider是一個(gè)可配置的factory
以上就是對angularJS Provider、factory、service的資料整理,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對本站的支持!
相關(guān)文章
Angular應(yīng)用的多語言設(shè)置問題解決示例
這篇文章主要為大家介紹了Angular應(yīng)用的多語言設(shè)置問題解決示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
Angularjs實(shí)現(xiàn)mvvm式的選項(xiàng)卡示例代碼
每位Web開發(fā)者應(yīng)該都知道,選項(xiàng)卡是現(xiàn)代web網(wǎng)頁中最常用的效果之一,所以本文重點(diǎn)是用angularjs這個(gè)非?;餸vvm框架,實(shí)現(xiàn)選項(xiàng)卡效果。有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-09-09
AngularJS 實(shí)現(xiàn)點(diǎn)擊按鈕獲取驗(yàn)證碼功能實(shí)例代碼
本文通過實(shí)例代碼給大家介紹了AngularJS 實(shí)現(xiàn)點(diǎn)擊按鈕獲取驗(yàn)證碼功能,代碼簡單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-07-07
AngularJS中的路由使用及實(shí)現(xiàn)代碼
本篇文章主要介紹了AngularJS中的路由使用及實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10
關(guān)于AngularJS中ng-repeat不更新視圖的解決方法
今天小編就為大家分享一篇關(guān)于AngularJS中ng-repeat不更新視圖的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09

