Angular中@Inject是否可选?

时间:2017-05-22 04:07:07

标签: javascript angular typescript

我在Angular中有一个简单的服务

// service.ts
export class SimpleService {
    // ...
}

// component.ts
@Component({
    selector: 'my-component',
    templateUrl: 'components/mycomp/mycomp.html',
    providers: [
        SimpleService
    ]
})
class MyComponent {
    constructor(private ss: SimpleService) {}
}

以上代码永远不会有效。我收到错误:Uncaught Error: Can't resolve all parameters for MyComponent: (?).

但是,如果我将构造函数定义更改为:

class MyComponent {
    constructor(@Inject(SimpleService) private ss: SimpleService) {}
}

然后它有效。即使文档似乎也没有使用@Inject。从文档中我了解到,当我的提供者令牌不是类时,显式需要@Inject;比如,尝试注入原始值,或者使用不透明的标记等等。

另外,我对打字稿很困惑。 Official documentation明确提到当@Inject()不存在时,Injector将使用参数的类型注释。 如果在打字稿转换过程中删除了类型信息,并且在应用程序运行时发生了DI,那么Angular如何在运行时使用类型注释?我有什么遗失的吗?

1 个答案:

答案 0 :(得分:3)

您忘了添加

1979

1900-01-01 00:00:00

另见