首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用我们自己的角度组件封装现有的角库组件?

用我们自己的角度组件封装现有的角库组件?
EN

Stack Overflow用户
提问于 2019-11-05 04:39:39
回答 1查看 953关注 0票数 0

这是我的问题。我想用我的组件封装剑道角组件。例如,kendo按钮组件被称为my-按钮.我们正在尝试的是创建我们的选择器,这样即使将来我们用其他库更改了kendo,它也不会影响开发中的现有组件,因为它们将使用自定义包装组件。当然,您可以手动创建包装组件。

但是,是否可以在自定义组件下自动构建库组件,或者是否可以用我们的选择器名称更改kendo或任何其他库组件选择器。寻找一些工具或功能,可以帮助我实现这一点。

EN

回答 1

Stack Overflow用户

发布于 2019-11-05 06:31:47

在从PrimeNG组件库转移到材料库之后,必须手动重新实现每个组件实例,我们面临着完全相同的挑战。展望未来,我们希望尽可能多地将库组件从应用程序中分离出来,这样如果我们决定再次更改库,就会更容易替换。

其基本思想是创建一个应用程序组件,它将充当一个传递到库组件的组件,并且所有公开的功能都将在组件实现的接口中定义。

下面是一个(而不是)通用和简单的例子:

代码语言:javascript
复制
|-- Components
     |-- button
          |-- button.component.css
          |-- button.component.html
          |-- button.component.ts
          |-- button.model.ts
          |-- button.module.ts

组件文件是使用CLI生成的标准文件。.model.ts文件包含组件的接口,.module.ts文件包含也使用CLI生成的角度模块。

button.component.html

代码语言:javascript
复制
<button (click)="clicked()"><i [ngClass]="icon"></i>{{text}}</button>

button.component.ts

代码语言:javascript
复制
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
import { IButton } from './button.model';

@Component({
  selector: 'app-button',
  templateUrl: './button.component.html',
  styleUrls: ['./button.component.css']
})
export class ButtonComponent implements OnInit, IButton {

  @Input() text: string;
  @Input() icon: string;

  @Output() clickEvent: EventEmitter<void> = new EventEmitter<void>();

  constructor() { }

  ngOnInit() {
  }

  clicked(): void {
    this.clickEvent.emit();
  }

}

将所有输入和输出(尽可能泛化)定义为组件(和任何未来的实现)需要实现的接口。这将确保组件的功能始终保持不变。

button.model.ts

代码语言:javascript
复制
import { EventEmitter } from '@angular/core';

export interface IButton {
    text: string;
    icon: string;
    clickEvent: EventEmitter<void>;
}

声明并导出模块中的组件。

button.module.ts

代码语言:javascript
复制
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ButtonComponent } from './button.component';

@NgModule({
  declarations: [
    ButtonComponent
  ],
  imports: [
    CommonModule,
    // component module imports here
  ],
  exports: [
    ButtonComponent
  ]
})
export class ButtonModule { }

按照上述方法,您只需导入模块就可以在应用程序中引用组件--您永远不会直接引用库组件。

代码语言:javascript
复制
<app-button [text]="'export'" [icon]="'fas fa-file-export'" (clickEvent)="doSomething()"></app-button>

如果需要替换或扩展组件,则对模块(例如导入库组件模块)、模板进行必要的更改,并确保组件仍然实现接口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58704604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档