我有两个几乎相同的组件,对于代码可重用性,我想将它们组合在一起,以便在我的项目中的不同位置使用。两者都是带有复选框的下拉列表。唯一不同的是进出的数据。
import {ROUTER_DIRECTIVES, RouteConfig, RouteParams, Router, RouterOutlet, RouterLink} from 'angular2/router';
import {FORM_PROVIDERS, FORM_DIRECTIVES, Control, NgClass, NgIf, CORE_DIRECTIVES} from 'angular2/common';
import {Component, Inject, Input, OnInit, OnChanges} from 'angular2/core';
import {Http, Headers, ContentHeaders, HTTP_PROVIDERS} from 'angular2/http';
import {User} from '/app/interfaces';
import {ActualsComponent } from '../actuals/actual.component';
import {ProjectService} from '../../projects/project.service';
import {LoginService} from '../../login/login.service';
import {SearchPipe} from '../custom-pipes/search-pipe';
@Component({
selector: 'dropdown-users',
templateUrl: 'app/templates/elements/dropdown-users.html',
providers: [FORM_PROVIDERS, HTTP_PROVIDERS, ProjectService, LoginService],
directives: [ROUTER_DIRECTIVES, FORM_DIRECTIVES, RouterLink, CORE_DIRECTIVES, RouterOutlet],
pipes: [SearchPipe]
})
export class DropDownUsers implements OnInit, OnChanges{
projectdata: Object;
selectedUsers: Object;
public showMenu: boolean;
projectSearchTerm: Control = new Control();
projectcount: number;
constructor(@Inject(ProjectService) projectService: ProjectService, @Inject(LoginService) loginService: LoginService, private http: Http, params: RouteParams) {
this.showMenu = false;
loginService.authenticate("user", "pwd");
this.projectdata = loginService.data;
this.projectcount = 0;
this.selectedUsers = new Array();
}
addUser(user: User){
this.selectedUsers.push(user);
}
}
另一个组件是相同的,除了它与用户而不是项目一起使用。
答案 0 :(得分:2)
您可以创建具有常用功能的基类,并在希望继承常见事物或更改/覆盖特定内容时对其进行扩展。
class Base {
selected: any[];
constructor(DI_ARGS) {
this.selected = [];
}
add(o) { this.selected.push(o); }
}
@Component({ template: `
<button (click)="add('Mike')">Add User</button>
<p>selected users: <a *ngFor="#user of selected">{{ user }}, </a></p>
` })
class Users extends Base {
constructor(DI_ARGS) {
super(DI_ARGS);
}
}
@Component({ template: `
<button (click)="add('build house')">Add Project</button>
<p>selected projects: <a *ngFor="#project of selected">{{ project }}, </a></p>
` })
class Project extends Base {
constructor(DI_ARGS) {
super(DI_ARGS);
}
}
有一些警告:'
super()