我在加载一个类到Angular组件时遇到了一个问题。很长一段时间以来,我一直在试图解决这个问题;我甚至试着把它们都合并到一个文件中。我拥有的是:

Application.ts

/// <reference path="../typings/angular2/angular2.d.ts" />

import {Component,View,bootstrap,NgFor} from "angular2/angular2";
import {NameService} from "./services/NameService";

@Component({
    selector:'my-app',
    injectables: [NameService]
})
@View({
    template:'<h1>Hi {{name}}</h1>' +
    '<p>Friends</p>' +
    '<ul>' +
    '   <li *ng-for="#name of names">{{name}}</li>' +
    '</ul>',
    directives:[NgFor]
})

class MyAppComponent
{
    name:string;
    names:Array<string>;

    constructor(nameService:NameService)
    {
        this.name = 'Michal';
        this.names = nameService.getNames();
    }
}
bootstrap(MyAppComponent);

服务/ NameService.ts

export class NameService {
    names: Array<string>;
    constructor() {
        this.names = ["Alice", "Aarav", "Martín", "Shannon", "Ariana", "Kai"];
    }
    getNames()
    {
        return this.names;
    }
}

我一直得到一个错误消息说没有NameService的提供者。

有人能帮我找出我的代码的问题吗?


当前回答

你也可以在bootstrap命令中声明依赖项:

bootstrap(MyAppComponent,[NameService]);

至少这是我在alpha40中使用的方法。

这是链接:http://www.syntaxsuccess.com/viewarticle/dependency-injection-in-angular-2.0

其他回答

在Angular 2中,你可以在三个地方“提供”服务:

引导 根组件 其他组件或指令

“引导提供者选项用于配置和覆盖Angular自己的预注册服务,比如路由支持。”——参考

如果你只想在整个应用中使用一个NameService实例(例如,Singleton),那么将它包含在根组件的providers数组中:

@Component({
   providers: [NameService],
   ...
)}
export class AppComponent { ... }

砰砰作响

如果你希望每个组件都有一个实例,可以使用组件配置对象中的providers数组:

@Component({
   providers: [NameService],
   ...
)}
export class SomeOtherComponentOrDirective { ... }

更多信息请参见分层注入器文档。

嗨,你可以在你的.ts文件中使用这个:

首先在这个.ts文件中导入你的服务:

import { Your_Service_Name } from './path_To_Your_Service_Name';

然后在同一个文件中添加提供商:

 @Component({
      selector: 'my-app',
      providers: [Your_Service_Name],
      template: `
        <h1>Hello World</h1> `   
    })

你应该在你的AppModule的NgModule元数据的providers数组中注入NameService。

@NgModule({
   providers: [MyService]
})

并且确保在你的组件中导入相同的名称(区分大小写),因为SystemJs是区分大小写的(根据设计)。如果你在你的项目文件中使用不同的路径名,像这样:

main.module.ts

import { MyService } from './MyService';

your-component.ts

import { MyService } from './Myservice';

那么System js会进行两次导入

将其添加到提供者而不是注射剂中

@Component({
    selector:'my-app',
    providers: [NameService]
})

在app.module.ts文件中将服务添加到providers[]数组中。 像下面的

//这里我的服务是CarService

app.module.ts

import {CarsService} from './cars.service';

providers: [CarsService] // you can include as many services you have