Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

282
Visualizações
Angular 2: sin proveedor para el servicio (inyectado)

Tengo dos servicios en mi aplicación: MainService y RightClickService. Solo se puede acceder a MainService globalmente en la aplicación, y RightClickService se inyecta en MainService. Por lo tanto, definí los siguientes archivos como:

aplicación.módulo.ts

 @NgModule({ declarations: [ AppComponent, ... ], imports: [ BrowserModule, FormsModule, HttpModule ], providers: [MainService], bootstrap: [AppComponent] }) export class AppModule { }

RightClickService no se menciona en app.module.ts.

servicio.ts

 @Injectable() export class MainService { constructor(private rightClickService: RightClickService) { console.log("Constructor is init"); } }

RightClickService existe solo en un componente nombrado dentro de la gran aplicación RightClickComponent.

clic derecho.component.ts:

 @Component({ selector: 'right-click', template: ` ... `, styleUrls: ['...'], providers: [RightClickService] }) export class RightClickComponent implements OnInit { constructor(private rightClickService: RightClickService) {} }

Aún así, me sale el error:

 EXCEPTION: No provider for RightClickService!

¿Sabes lo que estoy haciendo mal?

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Además de lo ya dicho, debes saber dos cosas:

  1. Su aplicación tiene solo un inyector raíz que contiene todos los proveedores definidos en la matriz @NgModule.providers de cualquier módulo en su aplicación, incluido AppModule .

  2. Cada componente tiene su propio inyector (inyector secundario del inyector raíz) que contiene proveedores declarados en la matriz @Component.providers del componente.

cuando angular quiere resolver dependencias (RightClickService) de un servicio (MainService) lo busca en el inyector raíz que contiene proveedores de todos los NgModules.

Cuando angular quiere resolver las dependencias (RightClickService) de un componente (RightClickComponent) lo busca en el inyector del componente si no lo encuentra, lo busca en el inyector del componente principal si no lo encuentra, hará lo mismo hasta que llegue al inyector raíz si no encontrado arrojará un error.

si quieres resolver el problema puedes hacer esto:

 function MainServiceFactory(RightClickService) { return new MainService(new RightClickService()); } @NgModule({ declarations: [ AppComponent, ... ], imports: [ BrowserModule, FormsModule, HttpModule ], providers: [ { provide: MainService, useFactory: MainServiceFactory, deps: [RightClickService] } ], bootstrap: [AppComponent] }) export class AppModule { }
about 4 years ago · Santiago Trujillo Relatório

0

Acabo de introducir esto en un Plunker y, a menos que haya escrito algo mal... lo que tienes parece funcionar. Entonces, ¿tal vez hay algo más mal?

¿Puedes ver el plunker aquí: https://plnkr.co/edit/ea9dFs?p=info

(La herramienta no me permite publicar sin el código... pero ya tienes el código de arriba... así que solo estoy pegando una parte).

 import { Injectable } from '@angular/core' @Injectable() export class RightClickService { constructor() { console.log("RightClickService is init"); } }
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda