当前位置: 首页 > 面试题库 >

$提供外部配置块

郎嘉树
2023-03-14
问题内容

我当然缺少有关喷油器的一些基本知识,但是我无法理解为什么

angular.module('app').config(function ($provide) {
    ...
});

还有这个

angular.module('app').config(function ($injector) {
    $injector.invoke(function ($provide) { ... });
});

按预期工作,而这

app.run(function($provide) {
    ...
});

会抛出

错误:[$ injector:unpr]未知提供程序:$ provideProvider <-$ provide

如下所述,config与提供者有一些特殊的关系,而run与实例打交道时,我不确定使config块如此特别的东西。

结果,是否没有办法到达$provide外部config块,例如,使用angular.injector()(尽管似乎也获得了提供者实例)?

除了好奇心外,这个问题还有一些实际考虑。在1.4中,所有$provide功能都暴露给模块,但对于1.3而言并非如此。


问题答案:

经过一些角度注射器的研究,我能够对自己的问题给出详尽的答案。

从本质上讲,$injector
config块和provider构造函数中以及$injector
其他各处,都有两个具有相同名称的不同服务,它们在内部提供程序/实例缓存中显式定义,并且在一起$provide(此代码在提供程序缓存中定义,因此只能注入config



虽然一般不建议,因为可能的竞争条件,有可能接触到实例缓存和配置特定的进行内部服务$provide$injector配置阶段结束后注射可供选择:

app.config(function ($provide, $injector) {
  $provide.value('$providerInjector', $injector);
  $provide.value('$provide', $provide);
});

可能的应用程序随时在配置服务提供商(如果可能)

app.run(function ($providerInjector) {
  var $compileProvider = $providerInjector.get('$compileProvider');
  ...
});

在运行时定义新组件

app.run(function ($provide) {
  $provide.controller(...);
  ...
});


 类似资料:
  • 问题内容: 如何使用Tomcat从Web应用程序外部的公共文件夹中提供图像文件?我不想在其他端口上使用第二个Apache文件服务器,因为图像文件是同一应用程序的一部分。而且我不想在webapps内部创建指向公共文件夹的符号链接,因为我的应用程序被部署为war文件....是否有一个更简单的解决方案,类似于将默认servlet用于webapps内部的静态内容,用于webapps外部的静态内容 问题答案

  • Netflix客户端配置库Archaius 它是所有Netflix OSS组件用于配置的库。Archaius是Apache Commons Configuration项目的扩展。它允许通过轮询源进行更改或将源更改推送到客户端来进行配置更新。Archaius使用Dynamic <Type> Property类作为属性的句柄。Archaius示例 class ArchaiusTest { Dyna

  • Spring Boot允许您外部化配置,以便您可以在不同的环境中使用相同的应用程序代码。 您可以使用属性文件,YAML文件,环境变量和命令行参数来外部化配置。 可以使用@Value注释将属性值直接注入到bean中,通过Spring的Environment抽象访问,或者通过@ConfigurationProperties绑定到结构化对象。 Spring Boot使用一个非常特殊的PropertySo

  • 基于此http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html文档,但我得到以下错误: 使用注释工作很好,但我真的希望远离它。这方面的任何帮助都是很好的 谢谢 我将此解释为文件${spring.application.name}.properties将从命令行传入

  • 我构建了一个Angular,它有自己的服务和组件: 和: 然后我将其导入我的: 当我将注入时,出现错误: 应用程序组件中的错误:文件服务没有提供程序 来自Angular文档: 当我们导入模块时,Angular 会将模块的服务提供程序(其提供程序列表的内容)添加到应用程序根注入器中。 这使得应用程序中知道提供者的查找标记的每个类都可以看到提供者。 我做这件事缺少什么?