Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

292
Views
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?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

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 { }
over 4 years ago · Santiago Trujillo Report

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"); } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!