Angular中提供程序和实例之间有什么区别?

Raj*_*rma 5 javascript config module angularjs

我是Angular的新手.我正在研究配置块并运行模块块.

请看下面的代码:

angular.module('myModule', []).
config(function(injectables) { // provider-injector
// This is an example of config block.
// You can have as many of these as you want.
// You can only inject Providers (not instances)
// into config blocks.
}).
run(function(injectables) { // instance-injector
// This is an example of a run block.
// You can have as many of these as you want.
// You can only inject instances (not Providers)
// into run blocks
});
Run Code Online (Sandbox Code Playgroud)

正如您在配置块中看到的那样,它写成:"您只能注入提供者(而不是实例)".

这是什么意思?谁能解释一下提供者和实例之间的区别是什么?

Vij*_*ran 4

其实你的问题问得很好。为了使其变得非常简单,我们在 Angular JS 中定义服务来实现我们的功能。Provider 是配置服务如何工作的方法之一。Angular JS 中还有一些概念,即 Values、Constants、Factory、Service 和 Decorator,它们可以帮助我们以不同的方式拦截服务。请检查以下链接。

https://docs.angularjs.org/guide/providers

回到提供者,它们用于定义应用程序范围的配置,这些配置甚至需要在应用程序启动之前完成。由于配置块是在加载 Angular JS 模块之前执行的,因此我们在它们下面配置提供程序。由于那时模块尚未加载,因此您无法访问配置块内的服务。

一旦 $injector 加载了所有模块,就会执行运行块。一旦进入运行块,您将无法再配置您的提供程序,因为无论如何您的服务都会被加载。这就是您无法访问运行块内的提供程序的原因。

让我们看一个例子。我设计的应用程序支持用户和管理屏幕。但与它们相关的功能是在各自的服务中定义的。我想在用户登录时仅加载适当的服务。我们使用以下提供程序来实现这一点。

定义角色Provider

myApp.provider("roles", function rolesProvider(){
var role;
this.setRole = function(value) {
role = value;
}

this.$get = function rolesFactory() {
if(role === "user") {
return new userRole();
} else {
return new adminRole();
}
}
});
Run Code Online (Sandbox Code Playgroud)

将 RolesProvider 配置为用户

myApp.config(["rolesProvider"], function(rulesProvider){
rulesProvider.setRole("user"); 
});
Run Code Online (Sandbox Code Playgroud)

当应用程序启动时,我的应用程序将配置为以用户身份运行,而不是以管理员身份运行。

如果您需要更多解释,请告诉我。