提问者:小点点

为什么“(SystemJS)无法解析所有参数”发生在Angular2中


全部:

我对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;
    }
}

我试图在构造函数中做的是设置一个默认的init参数start将计数默认为0,但我得到的错误如下:

(SystemJS)无法解析计数器的所有参数:(?)。

我的问题是:

这是因为Angular2将构造函数参数列表中的所有内容视为依赖注入,没有其他类型的参数允许设置在那里还是有其他原因导致此错误?我必须使用重置()来实现相同的目的?

这是否正确?

谢啦


共1个答案

匿名用户

"这是因为Angular2将构造函数参数列表中的所有内容视为依赖注入吗?"

是的。

要做到这一点,您可以使用@可选。但这是毫无意义的,仅此而已。你什么时候会提供值?所以它总是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) {}