Угловая ошибка с несколькими введенными объектами приводит к тому, что «нет поставщика для [объекта объекта]

Я пытался настроить приложение Angular 4. У меня много лет нет практики работы с веб-интерфейсом, поэтому я могу делать что-то явно глупое. Помощь приветствуется.

У меня есть объект конфигурации, который использует токен инъекции. У меня есть два сервиса, использующих его. Один принимает один параметр:

constructor(@Inject(APP_CONFIG) private config: AppConfig) {
  this.requestUrl = this.config.restRoot + listPresentationsUrl;
}

Другая служба получила дальнейшее развитие и использует HttpClient для извлечения данных с сервера. Однако конструктор:

constructor (@Inject(APP_CONFIG) private config: AppConfig, private web: HttpClient) {
this.requestUrl = config.restRoot + listDecksUrl;
}

вызывает ошибку, которую я не ожидаю. Этот сервис используется компонентом для получения данных. Как только я использую оба аргумента в конструкторе выше, я получаю ошибку no provider for [object Object]!. Компонент, запускающий его, использует службу. Если я использую один из двух аргументов, приложение не вызывает ошибку.

Какие-либо предложения? Полные классы приведены ниже. Я удалил некоторый код из onInit, но это не имеет значения для ошибки (это мой минимальный код, вызывающий ошибку).

Компонент (decklist.component.ts)

import { Component, OnInit } from '@angular/core';
import { DecksService } from './decks.service';
import { Deck } from './deck.model';

@Component({
  selector: 'slides-decks',
  templateUrl: './decklist.component.html',
  styleUrls: ['./decklist.component.css']
})
export class DeckListComponent implements OnInit {

  presentations: Deck[];
  constructor(private deckService: DecksService) {}


  ngOnInit(): void {
  }

}

Сервис (decks.service.ts)

import { Injectable, Inject } from '@angular/core';
import { Deck } from './deck.model';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/do';

import { AppConfig, APP_CONFIG, SLIDESHOW_CONFIG } from './../shared/app.config';

const listDecksUrl: string = 'list-decks';

@Injectable()
export class DecksService {

    private requestUrl: string;

    constructor (@Inject(APP_CONFIG) private config: AppConfig, private http: HttpClient) {
        this.requestUrl = this.config.restRoot + listDecksUrl;
    }

    listDecks(): Observable<Deck[]> {
        return this.http.get<Deck[]>(this.requestUrl);
    }

}

Общая конфигурация приложения (app.config.ts)

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

export let APP_CONFIG = new InjectionToken<AppConfig>('app.config');

export interface AppConfig {
  username: string;
  password: string;
  restRoot: string;
}

export const SLIDESHOW_CONFIG: AppConfig = {
    username: '**********',
    password: '**********',
    restRoot: 'http://localhost:8070/api'
};

Ошибка:

Ошибка: Нет провайдера для [object Object]! при инъекцииError (core.es5.js:1169) при noProviderError (core.es5.js:1207) при ReflectiveInjector_.webpackJsonp.../../../core/@angular/core.es5.js.ReflectiveInjector_.< em>throwOrNull (core.es5.js:2649) в ReflectiveInjector.webpackJsonp.../../../core/@angular/core.es5.js.ReflectiveInjector_.getByKeyDefault (core. es5.js:2688) в ReflectiveInjector.webpackJsonp.../../../core/@angular/core.es5.js.ReflectiveInjector_.getByKey (core.es5.js:2620) в ReflectiveInjector.webpackJsonp.../../../core/@angular/core.es5.js.ReflectiveInjector_.get (core.es5.js:2489) в resolveNgModuleDep (core.es5.js: 9481) в _callFactory (core.es5.js:9556) в _createProviderInstance$1 (core.es5.js:9495) в resolveNgModuleDep (core.es5.js:9477)


person Nic Gibson    schedule 06.09.2017    source источник


Ответы (1)


Кстати, это была опечатка в совершенно другом модуле. Angular иногда выдает неожиданные ошибки.

person Nic Gibson    schedule 13.09.2017