我尝试将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函数?
谢谢! :)
答案 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中了解更多关于依赖注入的知识,这个答案可以提供一些提示:
希望它可以帮到你, 亨利