/*
提供程序可以封装。 但是,value factory服务常数除外。 提供程序需要$get方法
使用提供程序时,无法单独配置。 要创建提供程序,请在config中使用angular
只能注入提供服务的APP服务商,但由于angualr提供了$provide,所以在使用provider时要注入config
的是$provide,需要从$provider创建provider
provider是唯一可以创建要注入config ()函数的服务的方法。 如果您希望在您的服务启动之前进行一些模块化配置,请使用提供程序。
$provide服务器负责告诉Angular如何创建新的可注入的东西,即服务器。 服务由称为提供程序的内容定义,您可以使用$provide创建提供程序。 必须使用$provide的provider ) )方法定义提供程序。 还可以通过请求将$provide注入APP应用程序的config函数来获得$provide服务。 使用方法是返回$get函数。 请注意,在config阶段,只有提供商可以注入。
*/
//注册模块
var app=angular.module("app",[]);
//向控制器注入value对象
app.controller("myCtrl",function($scope,myProvider,greeting){
myProvider.f("我是 provider");
console.log(myProvider.num);
greeting("greeting");
});
app.provider("myProvider",function(){
this.number='123';
//provider创建服务时,控制器唯一可以访问的属性和方法是由$get ()函数返回的属性和方法。 上面的代码将$get添加到this之上,最终返回此函数。
this.$get=function(){ //必须要有
var n=this.number;
return {
f:function(name){
console.log("heler"+name);
},
num:n};
}
});
使用provider创建服务的目的是为了可以在myApp.config )函数中修改一些变量并将其传递给最终项目。 可以在myApp.config中更改number的值,因为可以更改的变量必须位于this上
应该注意的是,不注入//提供商的情况下,在config中只能交付提供服务的提供商,此时在用户中,如果是方法的话,MyProvider就是服务。
//因此,我们在后面用驼峰命名法加上Provider,成为MyProviderProvider
//config允许注入的是provider和constance (常数),run允许注入的是provider和constant,可以是factory、service、value
app.config(function(myProviderProvider){
console.log(myProviderProvider)//{number: "123", $get: } config中的内容先输出
myProviderProvider.number="我是改过后的值";
console.log(myProviderProvider);
});
//注入provider
app.config(function($provide){
//console.log($provide)//{provider: , factory: , service: , value: , constant: ,…}
$provide.provider('greeting',function(){ //通过$provide.provider()进行自定义服务
this.$get = function() {
return function(name) {
console.log("Hello," + name);
};
};
});
});