相關教學推薦:《angular教學》
#什麼是Provider?
angularjs文件對provider的定義:
provider是一個帶有$get()
方法的物件。 injector呼叫$get
方法建立一個新的service的實例。 provider還有一些其他的方法,可以用來設定provider。
AngularJS使用$provide
註冊新的providers。 providers基本上都會創建一個新實例, 但每個provider只創建一次。 $provide
提供了6種方法來建立自訂provider, 我會用簡單的程式碼範例分別解釋他們。
6種方法如下:
constant
#value
Constant constant能被injected到任何地方。 constant不能被decorator攔截, 意味著constant的值永遠不能被改變。
var app = angular.module('app', []); app.config(function ($provide) { $provide.constant('movieTitle', 'The Matrix'); }); app.controller('ctrl', function (movieTitle) { expect(movieTitle).toEqual('The Matrix'); });
app.constant('movieTitle', 'The Matrix');
value是一個簡單的可被注入的值,可以是string, number, 也可以是function。
與constant不同的是:value不能被注入到configurations, 但value能被decorators攔截。
var app = angular.module('app', []); app.config(function ($provide) { $provide.value('movieTitle', 'The Matrix') }); app.controller('ctrl', function (movieTitle) { expect(movieTitle).toEqual('The Matrix'); })
建立value的簡單方法:app.value('movieTitle', 'The Matrix');
var app = angular.module('app' ,\[\]); app.config(function ($provide) { $provide.service('movie', function () { this.title = 'The Matrix'; }); }); app.controller('ctrl', function (movie) { expect(movie.title).toEqual('The Matrix'); });
app.service('movie', function () { this.title = 'The Matrix'; });
var app = angular.module('app', []); app.config(function ($provide) { $provide.factory('movie', function () { return { title: 'The Matrix'; } }); }); app.controller('ctrl', function (movie) { expect(movie.title).toEqual('The Matrix'); });
app.factory('movie', function () { return { title: 'The Matrix'; } });
var app = angular.module('app', []); app.value('movieTitle', 'The Matrix'); app.config(function ($provide) { $provide.decorator('movieTitle', function ($delegate) { return $delegate + ' - starring Keanu Reeves'; }); }); app.controller('myController', function (movieTitle) { expect(movieTitle).toEqual('The Matrix - starring Keanu Reeves'); });
var app = angular.module('app', []); app.provider('movie', function () { var version; return { setVersion: function (value) { version = value; }, $get: function () { return { title: 'The Matrix' + ' ' + version } } } }); app.config(function (movieProvider) { movieProvider.setVersion('Reloaded'); }); app.controller('ctrl', function (movie) { expect(movie.title).toEqual('The Matrix Reloaded'); });
以上是談談AngularJS中Providers之間的差異的詳細內容。更多資訊請關注PHP中文網其他相關文章!