繁体   English   中英

组件无法识别通过依赖项注入传递的我的服务(角度)

[英]component not recognizing my Service passed by Dependency injection (Angular)

从昨天开始,我一直在关注Angular教程( https://www.lynda.com/Angular-tutorials/Building-providing-service/540347/553419-4.html ),现在我开始使用服务。

名为MediaServiceService的Service类存储在文件media-service.service.ts中,如下所示:

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

@Injectable({
  providedIn: 'root'
})
export class MediaServiceService {

  constructor() { }

    get(){
    return this.mediaItems;
}
add(mediaItem){
    this.mediaItems.push(mediaItem);
}
delete(mediaItem){
    let index = this.mediaItems.indexOf(mediaItem);
    if(index >= 0){
        this.mediaItems.splice(index, 1);
    }
}

mediaItems = [
    {
        id: 1,
        name: "Firebug",
        medium: "Series",
        category: "Science Fiction",
        year: 2010,
        watchedOn: 1294166565384,
        isFavorite: false
    },
    {
        id: 2,
        name: "The Small Tall",
        medium: "Movies",
        category: "Comedy",
        year: 2015,
        watchedOn: null,
        isFavorite: true
    }, {
        id: 3,
        name: "The Redemption",
        medium: "Movies",
        category: "Action",
        year: 2016,
        watchedOn: null,
        isFavorite: false
    }, {
        id: 4,
        name: "Hoopers",
        medium: "Series",
        category: "Drama",
        year: null,
        watchedOn: null,
        isFavorite: true
    }, {
        id: 5,
        name: "Happy Joe: Cheery Road",
        medium: "Movies",
        category: "Action",
        year: 2015,
        watchedOn: 1457166565384,
        isFavorite: false
    }
];
}

本教程未随附Injectable装饰器,因为本教程未使用角度CLI,但我使用了。

我去了app.module.ts并按如下所示导入了服务:

import { MediaServiceService } from "./media-service.service";

然后在我的提供者的@NgModule装饰器的元数据属性上,仍在我的app.module.ts中:

providers: [
  MediaServiceService,
],

现在,当我将服务添加到我的组件之一时,问题就来了。 我尝试导入服务并将其通过构造函数注入,该类最终如下所示:

import {Component, OnInit} from '@angular/core';
import {MediaServiceService} from "../media-service.service";

@Component({
selector: 'app-media-item-list',
templateUrl: './media-item-list.component.html',
styleUrls: ['./media-item-list.component.css']
})
export class MediaItemListComponent implements OnInit{

mediaItems;

constructor(mediaService: MediaServiceService){

}

ngOnInit(): void {
    this.mediaItems = this.mediaService.get();
}

onMediaItemDelete(mediaItem) {
    this.mediaService.delete(mediaItem);
}


}

我在过去的项目中使用Ionic中的angular进行了一段时间的工作,我知道这是依赖注入的工作方式,甚至视频中的人也是如此,但是由于某些原因,它一直给我带来错误:

TS2339:类型“ MediaItemListComponent”上不存在属性“ mediaService”。

我正在使用PHPStorm作为我的IDE,这已经引起了我的一些小错误,所以我想也许只是关闭并重新打开它才能解决问题,但是并没有

像错误所说的那样,我的工作是创建一个名为mediaService的变量,然后在构造函数中,将注入的MediaService分配给变量,如下所示:

mediaService;
constructor(mediaService: MediaServiceService){
    this.mediaService = mediaService;
}

这样做确实有效,但是我仍然怀疑为什么我必须这样做(如果以前从未这样做过)。

我做错什么了吗? 为什么我的依赖项注入“没有正常工作”?

如果您打算在构造函数之外使用mediaService,请通过将构造函数更改为来声明它:

constructor(private mediaService: MediaServiceService){

}

您忘记对构造函数设置私有:

constructor(private mediaService: MediaServiceService){

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM