我对Angular 4的了解仅限于初学者。我正在尝试从某个组件中的共享模块提供服务,如下所示:
项目结构
app
|_ component1
|_ .css
|_ .html
|_ .component.ts
|_ .module.ts
|_ component2
|_ //same as above
|_ shared
|_ messages.components.ts
|_ number.directive.ts
|_ shared.module.ts
|_ validation.service.ts
问题
现在我的 shared.module.ts 如下所示:
//Certain other imports
import { ValidationService } from './validation.service';
@NgModule({
declarations: [...],
imports : [....],
exports : [....],
providers : [ValidationService]
});
export class SharedModule{}
以下是 validation.service.ts
的内容import { Injectable } from '@angular/core';
@Injectable()
export class ValidationService {
static validateText(control) {
//do something
}
}
现在我正在尝试使用ValidationService
中的component2
,为此,我已在SharedModule
模块中导入component2
,如下所示:
component2.module.ts
import { SharedModule } from './../shared/shared.module';
//some other imports
@NgModule({
declarations: [],
imports: [SharedModule]
})
export class Component2Module { }
和 component2.component.ts 如下所示:
import { SharedModule } from './../shared/shared.module';
//other imports
@Component({
selector: 'app-root',
templateUrl: './component2.component.html',
styleUrls: ['./component2.component.css']
})
export class Component2Component implements OnInit{
constructor(){
}
ngOnInit() {
this.sampleForm = new FormGroup({
sampletxt : new FormControl('', [Validators.required , ValidationService.validateText]), //this method here
});
}
}
但我无法使用此ValidationService
,除非我在上述文件中再次导入它。
我的问题是,为什么我没有在我ValidationService
中导入component2
而无法使用SharedModule
,因为我已将Service
导入component2模块,而SharedModule已提供multiprocessing.Pool
?我在这里错过了什么?这根本不可能吗?
答案 0 :(得分:3)
向imports: []
的{{1}}添加服务将其注册到依赖注入框架(DI)。
通过在构造函数参数中列出它,指示DI在创建组件实例时将服务传递给构造函数。
@NgModule()
要让TypeScript了解您的意思constructor(private validationService:ValidationService){
(项目中可能有多个或导入的模块),您需要添加导入以使其清晰。
之后你可以像
一样使用它ValidationService