使用(@Inject(Http)http:Http)与否有什么区别

时间:2016-02-11 22:18:47

标签: typescript angular

在此question之后,我有了一个新问题。这两种方式有什么区别?

这是我的初始代码:

import {Http, HTTP_PROVIDERS} from 'angular2/http';

@Component({

viewProviders: [HTTP_PROVIDERS],
..//

constructor(http: Http){
..//

但在进行测试时,他们提供了查找错误的代码:

import { Component, Inject} from 'angular2/core';
//above code should be at start.

constructor(@Inject(Http) http: Http) {

我认为它的工作方式相同,有人可以告诉我,有什么区别,或者只是第一个就像第二个但@Inject是隐含的或类似的东西。我的英语。

1 个答案:

答案 0 :(得分:2)

实际上,@Inject装饰器用于询问某种类型的依赖关系。此级别也支持字符串。

如果您已经有类ComponentInjectable类的装饰器,并且您在TypeScript中为参数(您的情况)指定了类型,则使用此其他装饰器是不必要的,因为分辨率将自动分类。如果您没有提供类型,则@Inject装饰器将非常有用......

另一个用例。如果您想使用 ngUpgrade (混合Angular1 / Angular2应用程序),Angular1的工厂只能按名称注册,您无法按类解析它们。所以在这里使用@Inject是必要的。看到这个plunkr:http://plnkr.co/edit/yMjghOFhFWuY8G1fVIEg?p=preview。它是用TypeScript编写的,但没有注释,但可以进行调整;)

您还可以查看此链接: