Angular:使用其他模块的服务

时间:2017-03-10 08:38:40

标签: javascript angular

我试图从模块外部导入服务。

我的设置如下:我有这个Foo模块

@NgModule({
    declarations: [
        FooComponent
    ],
    exports: [
        FooComponent
    ],
    providers:[
        FooService
    ]
});
export class FooModule {}
我在app.module.ts

中导入的

@NgModule({
    ...
    imports: [ FooModule ]
});
...

这很好用。

接下来我要从FooService内导入app.module.ts,因此我将行providers: { FooService }移至app.module.ts

@NgModule({
    ...
    providers: [FooService],
    imports: [ FooModule ]
});
...

到目前为止该应用仍然有效。最后一步,我将服务文件复制到foo目录之外,我更改了导入路径,我甚至重新启动了服务器,现在我在浏览器中收到错误

EXCEPTION: Uncaught (in promise): Error: Error in :0:0 caused by: No provider for FooService!

它再也找不到服务了。

当服务文件不在foo目录中时,为什么缺少服务的任何建议?这可以以某种方式修复吗?

1 个答案:

答案 0 :(得分:4)

我试过以下解决方案。它为我工作:

Foo模块

@NgModule({
    declarations: [
        FooComponent
    ],
    exports: [
        FooComponent
    ],
});
export class FooModule {}

<强> app.module.ts

import {Fooservice} from './FooService';
@NgModule({
    ...
    imports: [ FooModule ]
    providers: [FooService],
});
...

<强> Foo.component.ts

import { Component } from '@angular/core';
import { FooService }       from '../FooService'; 

@Component({

})
export class FooComponent {

    constructor(public fooservice: FooService) {
        ...
    }
}