当前位置: 首页 > 知识库问答 >
问题:

Angular2无服务提供商-外部模块

于鹏
2023-03-14

我构建了一个Angular模块,它有自己的服务和组件:

@NgModule({
  declarations: [ FileUploader],
  exports: [ FileUploader ],
  imports: [ CommonModule ],
  providers: [ FileService ],
})
export class FilesModule { }

文件服务

import { Injectable } from '@angular/core';

@Injectable()
export class FileService
{
    constructor() {}

    uploadFile(file): Promise {
        return new Promise((resolve, reject) => {
            ...
        }
    }
}

然后我将其导入我的应用程序模块

@NgModule({
  declarations: [ AppComponent ],
  entryComponents: [ AppComponent ],
  imports: [ FilesModule ]
})
export class AppModule { }

当我将文件服务注入应用程序组件时,出现错误:

应用程序组件中的错误:文件服务没有提供程序

来自Angular文档:

当我们导入模块时,Angular 会将模块的服务提供程序(其提供程序列表的内容)添加到应用程序根注入器中。

这使得应用程序中知道提供者的查找标记的每个类都可以看到提供者。

我做这件事缺少什么?

共有2个答案

强才捷
2023-03-14

我认为您正在尝试在AppComponent级别使用文件服务。如果这样做,您应该将FileService添加到AppModule的提供程序中,或者在FileModule级别使用FileService。

可能,您忘记了文件服务中的@Injectable()注释

程阳平
2023-03-14

当提供程序在我的< code>NgModule中运行时,我总是创建一个< code>ForRoot方法:

@NgModule({
  declarations: [FileUploader],
  exports: [FileUploader],
  imports: [CommonModule]
})
export class FilesModule {

  static forRoot(): ModuleWithProviders {
    return {
      ngModule: FilesModule,
      providers: [
        FileService
      ]
    }
  }
}

然后,您可以在应用模块中使用它:

@NgModule({
  declarations: [AppComponent],
  entryComponents: [AppComponent],
  imports: [FilesModule.forRoot()]
})
export class AppModule {}
 类似资料:
  • 问题内容: 当我有嵌套在根组件下的组件时,我无法实例化我的应用程序,该组件在其构造函数中使用。 我想知道为什么这种行为是非法的。假设我想在班级中使用该类,而只是在班级中引用该类。这似乎是不可能的。 创建层次结构的正确方法是什么? 谢谢你 PLNKR:http ://plnkr.co/edit/5Z0QMAEyZNUAotZ6r7Yi?p=preview 问题答案: 您可以直接将父组件注入到组件中,

  • 我希望用Python实现一个基于SAML 2.0的服务提供者。 我的Web应用程序目前都是Flask应用程序。我计划制作一个Flask蓝图/装饰器,允许我将单点登录功能放入预先存在的应用程序中。 我已经深入研究了python saml,但不幸的是,存在一些不值得解决的依赖性问题,因为我有太多预先存在的服务器/应用程序,这些服务器/应用程序的环境将不兼容。 PySAML2看起来可以工作,但是几乎没有

  • 我正在我的服务中添加SSO功能,以允许客户使用他们的广告帐户登录。为此,我使用componentpro中的SAML组件。com执行安全交互的正确方法是什么: < li >从IdP方面:除了IdP url,客户还应该向我的服务提供什么?任何只包含公钥的证书? < li >从服务提供商的角度:我应该向客户提供什么? < li >选择的SAML工具使用证书对发送给IdP的SAML请求进行签名,并对来自I

  • 在Weblogic中,我将JMS模块配置为“外部服务器”类型。在模块中,我设置了一个连接工厂,它有一个本地JNDI名称和一个远程JNDI名称。 我正在使用下面的Spring配置来尝试获取连接,但我在jndiName上不断遇到一个“name not found”错误,其中包含我尝试过的各种名称字符串。 有什么建议我可以试试吗?

  • 问题内容: 我正在构建一个快速的Web搜寻器,并且需要具有多线程DNS解析,因此我选择了一个名为dnsjava的多线程DNS服务提供商。不幸的是,我不知道如何替换默认的DNS服务提供商。 我查看了dnsjava 的README文件,但说明不是很完整。 替换标准的Java DNS功能: 从Java 1.4开始,可以在运行时加载服务提供者。要加载dnsjava服务提供者,请按照上述说明进行构建并设置系

  • 云原生计算基金会(CNCF)负责维护并整合Kubernetes和Prometheus之类的开源技术,今天它在开源峰会上宣布了22多家Kubernetes认证服务提供商(KCSP)的创始成员名单。KCSP是通过初审的企业组织,它们在帮助企业成功地采用Kubernetes方面有着丰富经验。此外,专业人员个人现在可以注册报名新的认证Kubernetes管理员(CKA)计划和考试。 KCSP的创始成员包括