2016-12-18 2 views
1

Все:Почему «(SystemJS) не удается разрешить все параметры» происходит в Angular2

Im довольно новый для Angular2, когда я пытаюсь построить простой счетчик службы, как:

импорта {Инъекционные} из "@ угловой/ядра";

@Injectable() 
export class Counter { 
    count = 0; 
    constructor(start = 0){ 
     this.count = start; 
     // this.reset(); 
    } 
    reset(start=0){ 
     this.count = start; 
    } 
    inc(){ 
     this.count++; 
    } 
    dec(){ 
     this.count--; 
    } 
    show(){ 
     return this.count; 
    } 
} 

То, что я пытался сделать в конструкторе установлен параметр start с инициализации по умолчанию по умолчанию отсчет до 0, но я получаю сообщение об ошибке, как:

(SystemJS) не удается разрешить все параметры для счетчика: (?).

Мой вопрос:

не потому, что это Angular2 будет рассматривать все в списке парам конструктора, как инъекции зависимостей, никакой другой тип PARAM позволило установить там, или есть другая причина этой ошибки? И я должен использовать это reset() для достижения такой же цели?

Это правильно?

Благодаря

ответ

2

"Это потому, что Angular2 будет рассматривать все в списке паров конструктору зависимости инъекции"

Да.

Что вы можете сделать, хотя сделать эту работу, это использовать @Optional. Но это было бы бессмысленно, в одиночку. Когда вы когда-нибудь будете давать значение? Так что всегда будет 0. Бессмысленно.

Если вы хотите предоставить произвольные значения для инъекций, вы можете использовать @Inject и настроить значение с помощью токена. Например

import { OpaqueToken, NgModule } from '@angular/core'; 

export const START = new OpaqueToken("some.token"); 

@NgModule({ 
    providers: [ 
    { provide: START, useValue: 100 } 
    ] 
}) 
export class AppModule {} 

Теперь вы можете придать ему и сделать его необязательного

import { Inject, Optional } from '@angular/core'; 
import { START } from './app.module'; 

constructor(@Optional @Inject(START) start = 0) {} 
+0

Спасибо, так что если мне нужно значение, мне нужно, чтобы определить его как зависимость величины. – Kuan

+0

Да, но также подумайте, действительно ли вам нужно получить ценность извне. Если нет, то нет необходимости даже иметь его как параметр конструктора. Или, может быть, это даже то, что можно просто добавить в файл констант и просто импортировать константы там, где это необходимо (вместо того, чтобы пытаться вставить). –

+0

Получите это. Кстати, не могли бы вы немного рассказать о том, почему следует использовать буквенную нотацию Object, например '{предоставлять: START, useValue: 100}', поскольку у START уже есть значение, почему мне все еще нужно давать значение useValue, и если я использую что-то похожее на '{обеспечить: START, useClass: START}' (скажем, START - это класс сейчас), поскольку START - это имя класса, почему нам все еще нужно указывать START в предоставлении? – Kuan

Смежные вопросы