【发布时间】:2017-10-30 02:46:45
【问题描述】:
假设我有以下文件
blog.abstract.ts
import { Component, ElementRef } from '@angular/core';
import { ItemService } from 'services/item/item.service';
import { Router } from '@angular/router';
import { ModalService } from 'services/modal/modal.service';
export class AbstractBlog {
constructor(protected modalService: ModalService, protected router: Router, protected itemService: ItemService) { }
// use services
}
blog1.component.ts
import { Component, ElementRef } from '@angular/core';
import { ItemService } from 'services/item/item.service';
import { Router } from '@angular/router';
import { ModalService } from 'services/modal/modal.service';
@Component({
selector: 'app-blog-1',
templateUrl: 'blog-1.html',
})
export class Blog1Component extends AbstractBlog {
constructor(private _elementRef: ElementRef, modalService: ModalService, router: Router, itemService: ItemService) {
super(modalService, router, itemService);
}
// use services & _elementRef
}
blog2.component.ts
import { Component, ElementRef } from '@angular/core';
import { ItemService } from 'services/item/item.service';
import { Router } from '@angular/router';
import { ModalService } from 'services/modal/modal.service';
@Component({
selector: 'app-blog-2',
templateUrl: 'blog-2.html',
})
export class Blog2Component extends AbstractBlog{
constructor(modalService: ModalService, router: Router, itemService: ItemService) {
super(modalService, router, itemService);
}
// use services
}
我想简化构造函数并避免导入每个服务并在每次需要新的 BlogComponent 时使用 super(....) 方法。
假设有数百个 BlogComponent,每个都在不同的文件夹中。
对于这些模块中的每一个,我都需要扩展 AbstractBlog、导入服务并使用相同的参数调用 super 方法。
现在,如果我想在 AbstractBlog 的构造函数中添加另一个服务,我将不得不更新一百个文件以匹配构造函数。
有没有更好的方法来处理这种情况?
【问题讨论】:
-
您只能使用
Injector -
感谢您回答 yurzui。你能告诉我一个基于这个例子的 Injector 的例子吗?
标签: angular typescript dependency-injection