公共组件 #18
@@ -0,0 +1,71 @@
|
|||||||
|
import {Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'editable-tag',
|
||||||
|
template: `
|
||||||
|
<nz-tag *ngIf="!inputVisible" class="editable-tag" title="双击进入编辑" [nzColor]="color" nzNoAnimation (click)="showInput(true)">
|
||||||
|
<ng-content></ng-content>
|
||||||
|
</nz-tag>
|
||||||
|
<input #inputElement
|
||||||
|
nz-input
|
||||||
|
nzSize="small"
|
||||||
|
*ngIf="inputVisible"
|
||||||
|
type="text"
|
||||||
|
[(ngModel)]="inputValue"
|
||||||
|
style="width: 78px;"
|
||||||
|
(blur)="handleInputConfirm()"
|
||||||
|
(keydown.enter)="handleInputConfirm()"
|
||||||
|
/>
|
||||||
|
<i nz-icon nzType="edit" nzTheme="fill" style="cursor: pointer" (click)="showInput(false)"></i>
|
||||||
|
`,
|
||||||
|
styles: [`.editable-tag {
|
||||||
|
background: rgb(255, 255, 255);
|
||||||
|
border-style: none;
|
||||||
|
}`]
|
||||||
|
})
|
||||||
|
export class EditableTagComponent implements OnInit {
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
}
|
||||||
|
|
||||||
|
inputVisible = false;
|
||||||
|
inputValue = '';
|
||||||
|
@ViewChild('inputElement', {static: false}) inputElement?: ElementRef;
|
||||||
|
|
||||||
|
@Output() valueChange = new EventEmitter<string>();
|
||||||
|
@Input() color: string;
|
||||||
|
private doubleClickInfo = {
|
||||||
|
date: null,
|
||||||
|
};
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
}
|
||||||
|
|
||||||
|
showInput(doubleClick: boolean): void {
|
||||||
|
if (doubleClick) {
|
||||||
|
if (!this.doubleClickInfo.date) {
|
||||||
|
this.doubleClickInfo.date = new Date().getTime();
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (new Date().getTime() - this.doubleClickInfo.date < 200) {
|
||||||
|
this.inputVisible = true;
|
||||||
|
setTimeout(() => {
|
||||||
|
this.inputElement?.nativeElement.focus();
|
||||||
|
}, 10);
|
||||||
|
}
|
||||||
|
this.doubleClickInfo.date = new Date().getTime();
|
||||||
|
} else {
|
||||||
|
this.inputVisible = true;
|
||||||
|
setTimeout(() => {
|
||||||
|
this.inputElement?.nativeElement.focus();
|
||||||
|
}, 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
handleInputConfirm(): void {
|
||||||
|
this.valueChange.emit(this.inputValue)
|
||||||
|
this.inputValue = '';
|
||||||
|
this.inputVisible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
import {NgModule} from '@angular/core';
|
||||||
|
import {CommonModule} from '@angular/common';
|
||||||
|
import {EditableTagComponent} from './editable-tag.component';
|
||||||
|
import {NzIconModule, NzInputModule, NzTagModule} from 'ng-zorro-antd';
|
||||||
|
import {FormsModule} from '@angular/forms';
|
||||||
|
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [EditableTagComponent],
|
||||||
|
exports: [
|
||||||
|
EditableTagComponent
|
||||||
|
],
|
||||||
|
imports: [
|
||||||
|
CommonModule,
|
||||||
|
NzTagModule,
|
||||||
|
FormsModule,
|
||||||
|
NzInputModule,
|
||||||
|
NzIconModule
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class EditableTagModule {
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user