我将举一个简化的例子来解释我的问题。
app.module.ts
...
providers: [MyService]
...
parent.component.ts
@Component({
selector: 'parent',
template:'<child></child>'
})
export class ParentComponent {
constructor(private myService: MyService) {} <-- my service has been injected successfully
}
child.component.ts
@Component({
selector: 'child',
template:'<h1>child</h1>'
})
export class ChildComponent {
constructor(private myService: MyService) {} <-- Error: No provider for MyService
}
我的印象是,一旦声明了服务提供者,该组件及其所有子分支就可以使用相同的服务。
我可以通过向子项添加提供程序来解决问题:
@Component({
selector: 'child',
template:'<h1>child</h1>',
providers: [MyService]
})
export class ChildComponent {
constructor(private myService: MyService) {} <-- Now it loads fine, but is it a new instance?
}
然而,这让我对DI在角度方面的工作方式感到困惑。为什么我收到错误:没有MyService的提供者?
修改
发现问题,将它留在这里,这有助于任何人。这不是Angular DI,因为我的掠夺者的例子无法复制这个问题。事实证明,
的网址部分import { MyService } from './services/myService.service';
区分大小写。在app模块和父模型中,它都是小写的,而在孩子中它是Camel Case。