angular2无法解析' RequestOptions'(?)的所有参数

时间:2016-01-28 07:38:50

标签: angular

我尝试将http提供程序导入到我自己的提供程序中。但它抛出了上面提到的错误。

首先我将Http导入我的ActionTracker-Service。但后来我得到了错误

  

异常没有AppComponent的提供者 - > ActionTracker - > HTTP

所以我也将Http导入了我的boot.ts.

的index.html

<html>
  <head>
    <title>Angular 2 QuickStart</title>

    <!-- 1. Load libraries -->
    <script src="angular2/bundles/angular2-polyfills.js"></script>
    <script src="systemjs/dist/system.src.js"></script>

    <script src="rxjs/bundles/Rx.js"></script>
    <script src="angular2/bundles/angular2.dev.js"></script>
    <script src="angular2/bundles/http.dev.js"></script>
    <!-- 2. Configure SystemJS -->
    <script>
      System.config({
        packages: {
          app: {
            format: 'register',
            defaultExtension: 'js'
          }
        }
      });
      System.import('app/boot')
            .then(null, console.error.bind(console));
    </script>

    <link href="bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="font-awesome/css/font-awesome.min.css" rel="stylesheet">
    <link href="assets/styles/main.css" rel="stylesheet">
  </head>
  <!-- 3. Display the application -->
  <body>
    <my-app>Loading...</my-app>
  </body>
</html>

boot.ts

import {bootstrap}    from 'angular2/platform/browser'
import {AppComponent} from './app.component'
import {Http, ConnectionBackend, RequestOptions} from 'angular2/http'

bootstrap(AppComponent, [ConnectionBackend, RequestOptions, Http]);

动作tracker.service.ts

import {Injectable} from 'angular2/core';
import {Track} from './track'
import {Http} from 'angular2/http'

@Injectable()
export class ActionTracker {
  constructor(private _http:Http){}
}

即将发生的错误是:

Cannot resolve all parameters for 'RequestOptions'(?). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'RequestOptions' is decorated with Injectable.
Error: Cannot read property 'getOptional' of undefined(…)

当我通过&#39; Http&#39;只在boots.ts文件中,我遇到了缺少ConnectionBackend和RequestOptions的错误。所以我添加了两个,但现在我陷入了RequestOptions的错误。

任何人都可以告诉,为什么会出现此错误?为什么我还需要将导入的Providers作为Array传递给bootstrap函数?

谢谢! :)

1 个答案:

答案 0 :(得分:5)

RequestOptions的构造函数接受RequestOptionsArgs类型的参数。

为防止出现此类问题,您应该使用HTTP_PROVIDERS函数中的bootstrap数组:

import {bootstrap} from 'angular2/platform/browser';
import {HTTP_PROVIDERS} from 'angular2/http';

bootstrap(AppComponent, [
  HTTP_PROVIDERS
]);

Angular2提供了这样的数组,只需为HTTP,路由等特定功能配置所有提供程序......

我猜您在组件的ActionTracker属性中指定了providers。这可以很好,除非您想要共享Angular2应用程序的所有元素的服务实例。在这种情况下,您还需要在bootstrap函数中指定它。

如果你想在Angular2中了解更多关于依赖注入的知识,这个答案可以提供一些提示:

希望它可以帮到你, 亨利