我正在使用angular2.0演示应用程序,但似乎注入不能从构建24工作并给我错误“原始错误:无法解析MyAppComponent的所有参数。确保它们都有效类型或注释。“
直到23号工作正常,请帮我解决问题
下面是演示代码,我原来只是为了学习目的而做了一些操作
import {Component, View, bootstrap, NgFor} from 'angular2/angular2';
module foo{
class FriendsService {
names: Array<string>;
constructor() {
this.names = ["Alice", "Aarav", "Martín", "Shannon", "Ariana","Kai"];
}
}
@Component({
selector: 'array',
injecetables: [FriendsService]
})
@View({
template: '<p>My name: {{ myName }}</p><p>Friends:</p><ul><li *ng-for="#name of names">{{ name }}</li></ul>',
directives: [NgFor]
})
export class arrayComponent {
myName: string;
names: Array<string>;
constructor(friendsService: FriendsService) {
this.myName = 'Alice';
this.names = friendsService.names;
}
}
}
bootstrap(foo.arrayComponent);
答案 0 :(得分:7)
似乎the currently latest angular2, alpha-35,将appInjector
替换为bindings
。
像这样:
import {FriendsService} from 'FriendsService';
@Component({
selector: 'array',
bindings: [FriendsService]
})
我还必须明确导出FriendsService
:
export class FriendsService {
答案 1 :(得分:2)
injectables
的新语法是appInjector
。
尝试:
@Component({
selector: 'array',
appInjector: [FriendsService]
})
此外,您还需要将Component
和View
的导入更改为:
import {ComponentAnnotation as Component, ViewAnnotation as View} from "angular2/angular2";
答案 2 :(得分:2)
在Angular 2中,有应用程序范围的进样器,然后是组件进样器。
如果您只想在整个应用中使用一个FriendsService实例,请将其包含在bootstrap()数组中:
@Component({
// providers: [FriendsService],
...
bootstrap(App, [FriendsService])
如果您希望每个组件只有一个实例,请改用组件配置对象中的providers
数组:
@Component({
providers: [FriendsService ],
...
bootstrap(App, [])
有关详情,请参阅Hierarchical Injectors doc。
答案 3 :(得分:0)
模块foo { class FriendsService {...
您的FriendsService
课程是在模块中定义的,这有两个方面的问题:
foo
FriendsSerivce
时,您并未指定它位于foo
模块中。我建议完全删除foo模块并依赖于amd / commonjs中的模块模式。这意味着您不需要导出类(假设它们位于同一个文件中),并且您不需要更改组件中类的引用。
答案 4 :(得分:0)
您的FriendsService
在模块中被抽象而未被导出,这就是arrayComponent
无法访问它并引发错误的原因。
您应该取出模块,并在同一范围内将foo
声明为arrayComponent
以上。
此外,由于arrayComponent
不属于foo
,因此最后的引导程序错误。只是拥有它
bootstrap(arrayComponent)
它应该没问题。