微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NgModule提供程序未在Angular中提供服务

如何解决NgModule提供程序未在Angular中提供服务

因此,我开始学习有角度的知识,并且刚刚开始研究服务和依赖注入。我创建了一个非常基本的服务,并试图使用提供程序来使用组件中的服务。但是,在组件中它给了我错误

找不到名称“ CourseService”

快速解决方案是将服务直接导入到组件中,但是我知道这是一种不好的做法,并且与服务和提供者的观点背道而驰。

app.module.ts

import { browserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { CourseService } from './courses.service';

@NgModule({
  declarations: [
    AppComponent
  ],imports: [
    browserModule,AppRoutingModule
  ],providers: [CourseService],bootstrap: [AppComponent]
})
export class AppModule { }

app.component.ts

import { Component } from '@angular/core';
//import { CourseService } from './courses.service';


@Component({
  selector: 'app-root',templateUrl: './app.component.html',styleUrls: ['./app.component.css']
})
export class AppComponent {
  CList:string[];

  constructor(service: CourseService){
    this.CList=service.getCourses();
  }
}

courses.service.ts

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

@Injectable({
  providedIn: 'root'
})
export class CourseService {
  getCourses(){
    return ["course1","course2","course3"];
  }
  constructor() {   
  }
}

编辑: 我的印象是,直接导入不会使它成为单例,因此会破坏它。显然提供了root的权限。

解决方法

在app.component.ts中取消注释此行:

//import { CourseService } from './courses.service';

顺便说一句,如果您在可注入装饰器中将 providedIn 属性与'root'一起使用,则只需从app.module provider数组中删除服务,因为CoursesService将作为单例服务已经存在。

https://angular.io/api/core/Injectable#providedIn

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。