Angular 5开发遇StaticInjectorError:Vtos无提供者求助
NullInjectorError: No provider for Vtos! in Angular 5 Hey, let's sort out this dependency injection error you're running into! That NullInjectorError means Angular can't find a registered provider for your Vtos service when it tries to inject it into VtoReportComponent. Let's walk through the fixes step by step.
Step 1: Fix Your Service's Decorator
Looking at your vto.service.ts snippet, you imported Component instead of the required Injectable decorator—this is a critical mix-up. Services need the @Injectable() decorator to tell Angular they're meant to be injected into other components/services. Here's the corrected start of your service file:
import { Injectable } from '@angular/core'; import { Http, HttpModule } from '@angular/http'; import { Observable } from 'rxjs/Observable'; @Injectable() export class Vtos { constructor(private http: Http) {} // Your service methods and logic go here }
Step 2: Register the Service in AppModule
Since you're using Angular 5 (which doesn't support the providedIn: 'root' syntax added in Angular 6), you need to explicitly add your Vtos service to the providers array in your AppModule to make it available across your app:
import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { HttpModule } from '@angular/http'; import { Vtos } from './path/to/vto.service'; // Update this to your actual service file path import { VtoReportComponent } from './path/to/vto-report.component'; // Your component path @NgModule({ declarations: [ VtoReportComponent // Add other components/directives/pipes here ], imports: [ BrowserModule, HttpModule // Add other imported modules here ], providers: [ Vtos // Register your service here ], bootstrap: [/* Your root component (e.g., AppComponent) */] }) export class AppModule { }
Step 3: Double-Check Component Injection
Make sure you're correctly injecting the Vtos service in VtoReportComponent's constructor, with the right import path:
import { Component, OnInit } from '@angular/core'; import { Vtos } from './path/to/vto.service'; // Confirm this path matches your service location @Component({ selector: 'app-vto-report', templateUrl: './vto-report.component.html' }) export class VtoReportComponent implements OnInit { constructor(private vtosService: Vtos) { } // Correct injection syntax ngOnInit() { // Use your service here, e.g. this.vtosService.yourMethod() } }
Quick Notes for Your Environment
- Since you're working with .NET Core 2.0 in Visual Studio 2017 15.6.7, double-check that all import paths in your Angular code match the actual file structure (no typos or wrong folder references).
- For RxJS 5.5.10, if you use operators like
maporsubscribein your service, make sure you import them correctly (e.g.,import 'rxjs/add/operator/map';).
内容的提问来源于stack exchange,提问作者SilverFish

