Arhn - архитектура программирования

Введите значение токена в глобальный контейнер в Angular 2, не удается разрешить все параметры

Я пытаюсь глобально внедрить значение в контейнер DI моего приложения в Angular 2 в соответствии с официальная документация.

Однако я получаю сообщение об ошибке:

compiler.es5.js:1540 Uncaught Error: Can't resolve all parameters for AppComponent: (?).
    at syntaxError (http://localhost:4200/vendor.bundle.js:30216:34)
    at CompileMetadataResolver._getDependenciesMetadata (http://localhost:4200/vendor.bundle.js:43553:35)
    at CompileMetadataResolver._getTypeMetadata (http://localhost:4200/vendor.bundle.js:43421:26)
    at CompileMetadataResolver.getNonNormalizedDirectiveMetadata (http://localhost:4200/vendor.bundle.js:43030:24)
    at CompileMetadataResolver._getEntryComponentMetadata (http://localhost:4200/vendor.bundle.js:43674:45)
    at http://localhost:4200/vendor.bundle.js:43257:110
    at Array.map (native)
    at CompileMetadataResolver.getNgModuleMetadata (http://localhost:4200/vendor.bundle.js:43257:73)
    at JitCompiler._loadModules (http://localhost:4200/vendor.bundle.js:54306:66)
    at JitCompiler._compileModuleAndComponents (http://localhost:4200/vendor.bundle.js:54265:52)

Вот мои классы:

app.module.ts

import {BrowserModule} from '@angular/platform-browser';
import {InjectionToken, NgModule} from '@angular/core';

import {AppComponent} from './app.component';

export interface AppConfig {
  apiEndpoint: string;
  title: string;
}

export const HERO_DI_CONFIG: AppConfig = {
  apiEndpoint: 'api.heroes.com',
  title: 'Dependency Injection'
};

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


@NgModule({
  imports: [
    BrowserModule
  ],
  declarations: [
    AppComponent
  ],
  providers: [
    { provide: APP_CONFIG, useValue: HERO_DI_CONFIG }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {
}

app.component.ts

import {Component as NgComponent, Inject} from '@angular/core';
import {APP_CONFIG, AppConfig} from './app.module';


@NgComponent({
  selector: 'my-app',
  templateUrl: './app.component.html'
})
export class AppComponent {
  constructor (@Inject(APP_CONFIG) config: AppConfig) {
    console.log(config.apiEndpoint, config.title);
  }
}

В чем может быть проблема и какую стратегию отладки следует использовать? Ошибка и трассировка стека мне здесь не очень помогают.


Ответы:


1

Как указано здесь @yurzui: @Inject() для InjectionToken, объявленного в модуле, не работает в angular2

Вы должны переместить export let APP_CONFIG = new InjectionToken<AppConfig>('app.config'); в отдельный файл, так как это вызывает проблему циклической зависимости.

17.05.2017
  • Спасибо за предложение, я рассмотрю его и постараюсь применить это решение. Кстати: есть ли проблема в Angular по этому поводу? Я думаю, что сообщение об ошибке должно быть более ясным… 18.05.2017
  • Подтвержденный. На самом деле это имеет смысл с точки зрения дизайна: мы не должны упоминать app.module.ts в других файлах. 18.05.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..