注射器不能在角度2.0最新版本26中工作

时间:2015-06-11 12:05:26

标签: angular typescript1.5

我正在使用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);

5 个答案:

答案 0 :(得分:7)

似乎the currently latest angular2, alpha-35,appInjector替换为bindings

像这样:

import {FriendsService} from 'FriendsService';

@Component({
    selector: 'array',
    bindings: [FriendsService]
})

我还必须明确导出FriendsService

export class FriendsService {

Complete code example here

答案 1 :(得分:2)

injectables的新语法是appInjector

尝试:

@Component({
  selector: 'array',
  appInjector: [FriendsService]
})

此外,您还需要将ComponentView的导入更改为:

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, [])

Plunker

有关详情,请参阅Hierarchical Injectors doc。

答案 3 :(得分:0)

  

模块foo {     class FriendsService {...

您的FriendsService课程是在模块中定义的,这有两个方面的问题:

  1. 您的课程需要从模块中导出,以便在foo
  2. 之外显示
  3. 当您引用FriendsSerivce时,您并未指定它位于foo模块中。
  4. 我建议完全删除foo模块并依赖于amd / commonjs中的模块模式。这意味着您不需要导出类(假设它们位于同一个文件中),并且您不需要更改组件中类的引用。

答案 4 :(得分:0)

您的FriendsService在模块中被抽象而未被导出,这就是arrayComponent无法访问它并引发错误的原因。

您应该取出模块,并在同一范围内将foo声明为arrayComponent以上。

此外,由于arrayComponent不属于foo,因此最后的引导程序错误。只是拥有它

bootstrap(arrayComponent)

它应该没问题。