Ошибка StaticInjectorError при создании экземпляра класса из службы

У меня есть 2 файла, один - app.component.ts, второй - cars.service.ts.

я создал класс в моем сервисе, и в конструкторе я передаю параметр вдоль метода в классе. Никаких проблем пока нет, но фактическая статистика проблем после создания экземпляра класса в app.component.ts.

Мой браузер выдает StaticInjectorError(AppModule)[Cars -> String]: StaticInjectorError(Платформа: ядро) [Cars -> String]: ошибка

Если я удалю параметр из конструктора, тогда проблема будет решена.. я не понимаю, что происходит.. любые предложения будут оценены.

Код моего сервисного файла [файл cars.service.ts]

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

@Injectable()
export class Cars {

carName: string;

    constructor(public cn: string) {
        this.carName = cn;
    }

    sayHello() {
        console.log('from cars.service.ts');
    }

}

мой app.component.ts

import { Component } from '@angular/core';
import { Cars } from './cars.service';

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})

export class AppComponent {
  title = 'cars';

  list: Cars = new Cars('Audi');

      constructor(private cs:Cars) {

  }

  btnClick() {
    this.cs.sayHello();
  }

}

1 ответ

Решение

Angular использует Dependency Injection для управления сервисами, поэтому вам не нужно создавать их экземпляры самостоятельно, но Angular не знает, что делать с параметром 'cn' при создании сервиса.

Я не уверен, почему вы хотите установить carName в вашем сервисе, но вы не должны пытаться сделать это через конструктор.

Было бы полезно проверить следующие ссылки документации Angular, если вы этого еще не сделали:

Также отмечу, что вы можете включать параметры в конструкторы ваших сервисов, но они должны быть сами по себе инъекционными. Например, типично видеть сервисы со встроенным в них сервисом регистрации.

Другие вопросы по тегам