小编给大家分享一下AngularJS中Providers是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

                                                           
什么是Provider?
angularjs文档对provider的定义:
provider是一个带有$get()方法的对象。injector调用$get方法创建一个新的service的实例。provider还有一些其他的方法,可以用来配置provider。
AngularJS使用$provide注册新的providers。providers基本上都会创建一个新实例, 但每个provider只创建一次。$provide提供了6种方法创建自定义provider, 我会用简单的代码示例分别解释他们。
6种方法如下:
- constant 
- value 
- service 
- factory 
- decorator 
- provider 
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');
});AngularJS提供了一种更简便的方式创建constant. 你可以将上面3至5行的代码重写为:
app.constant('movieTitle', 'The Matrix');Value
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');Service
service是一个可以注入的构造函数。如果你想,你可以在函数中指定需要的依赖。
service是一个单例, 只被创建一次。services是一个很好的方式,用于控制器之间传递数据,如共享数据。
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');
});创建service简单方式:
app.service('movie', function () {
 this.title = 'The Matrix';
});Factory
factory是一个可注入的函数。
与service的相同点:factory也是一个单例,也可以在此函数中指定依赖。
区别是:factory注入一个普通函数,AngularJs将调用此函数,而service注入一个构造函数。
service是一个构造函数,要调用new创建一个新对象。而用factory,你可以让这个函数返回你想要的任何东西。
你将会看到,factory是一个只有$get方法的provider。
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');
});创建factory的简单方式:
app.factory('movie', function () {
 return {
   title: 'The Matrix';
 }
});Decorator
decorator可以修改或封装其它的providers,但constant不能被装饰。
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');
});Provider
provider是所有providers中最复杂的,可以有复杂的creation函数和配置选项。
provider实际是一个可配置的factory。 provider接受一个对象或构造函数。
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是什么的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联-成都网站建设公司行业资讯频道!
网页名称:AngularJS中Providers是什么-创新互联
文章位置:http://www.scyingshan.cn/article/edici.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 