热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ngzorroantd标签组件tag实现回车连续新增

zorrotag实现编辑状态、连续新增先看实现效果官网给的示例只有新增、删除,并且不可连续新增。自己制作实现这两个状态。下面直接贴代码了模板中代码:

zorro tag 实现编辑状态、连续新增


  • 先看实现效果
    在这里插入图片描述

  • 官网给的示例只有新增、删除,并且不可连续新增。自己制作实现这两个状态。

  • 下面直接贴代码了

  • 模板中代码:

    <span *ngFor&#61;"let tag of tags;let i&#61;index;"><nz-tag *ngIf&#61;"tag.visible"[nzMode]&#61;"i &#61;&#61;&#61; -1 ? &#39;default&#39; : &#39;closeable&#39;"(nzAfterClose)&#61;"handleClose(tag)"(click)&#61;"showInputInArray(tag)"(nzOnClose)&#61;"onCloseTagInArray()"><span style&#61;"font-size:1.2em;">{{ sliceTagName(tag.text) }}span>nz-tag><input #inputElementInArray*ngIf&#61;"!tag.visible"type&#61;"text" nz-input nzSize&#61;&#39;small&#39; style&#61;"width:78px;"[(ngModel)]&#61;"tag.text"(blur)&#61;"handleInputConfirmInArray(tag)"(keydown.enter)&#61;"handleInputConfirmInArray(tag)">
    span><nz-tag*ngIf&#61;"!inputVisible"class&#61;"editable-tag"(click)&#61;"showInput()"><i nz-icon type&#61;"plus">i><span style&#61;"font-size:1.2em;">点我新增span>
    nz-tag><input#inputElementnz-inputnzSize&#61;"small"*ngIf&#61;"inputVisible" type&#61;"text"[(ngModel)]&#61;"inputValue"style&#61;"width: 78px;"(blur)&#61;"handleInputConfirm()"(keydown.enter)&#61;"handleInputConfirm()">

  • CSS代码

    .editable-tag ::ng-deep .ant-tag {background: rgb(255, 255, 255);border-style: dashed;
    }

  • ts代码

    import { Component, OnInit, ViewChild, ElementRef } from &#39;&#64;angular/core&#39;;
    import { NzMessageService } from &#39;ng-zorro-antd&#39;;&#64;Component({selector: &#39;app-tag-edit&#39;,templateUrl: &#39;./tag-edit.component.html&#39;,styleUrls: [&#39;./tag-edit.component.css&#39;]
    })
    export class TagEditComponent implements OnInit {private tag01:CcTag &#61; new CcTag();private tag02:CcTag &#61; new CcTag();private tag03:CcTag &#61; new CcTag();private tags:CcTag[] &#61; [];private skipClick:boolean &#61; false;private newOngoing:boolean &#61; true;inputVisible &#61; false;inputValue &#61; &#39;&#39;;&#64;ViewChild(&#39;inputElement&#39;) inputElement: ElementRef;&#64;ViewChild(&#39;inputElementInArray&#39;) inputElementInArray: ElementRef;//#region 系统生命周期钩子constructor(private msg:NzMessageService) { }ngOnInit() {this.initTags();}//#endregion//#region 初始化数据initTags(){this.tag01.text&#61;&#39;单袋&#39;;this.tag01.value&#61;&#39;单袋&#39;;this.tag01.visible&#61;true;this.tag02.text&#61;&#39;双袋&#39;;this.tag02.value&#61;&#39;双袋&#39;;this.tag02.visible&#61;true;this.tag03.text&#61;&#39;编织袋&#39;;this.tag03.value&#61;&#39;编织袋&#39;;this.tag03.visible&#61;true;this.tags.push(this.tag01);this.tags.push(this.tag02);this.tags.push(this.tag03);}//#endregionhandleClose(removedTag: {}): void {this.tags &#61; this.tags.filter(tag &#61;> tag !&#61;&#61; removedTag);}sliceTagName(tag: string): string {const isLongTag &#61; tag.length > 20;return isLongTag ? &#96;${tag.slice(0, 20)}...&#96; : tag;}showInput(): void {this.inputVisible &#61; true;setTimeout(() &#61;> {this.inputElement.nativeElement.focus();}, 10);}// 数组反应到UI上的inputshowInputInArray(tag:CcTag){if(this.skipClick){this.skipClick &#61; false;return;}tag.visible&#61;false;setTimeout(() &#61;> {this.inputElementInArray.nativeElement.focus();}, 10);}handleInputConfirmInArray(tag:CcTag){tag.visible&#61;true;}handleInputConfirm(): void {var target:CcTag &#61; new CcTag();target.text&#61;this.inputValue;target.value&#61;this.inputValue;target.visible&#61;true;if (this.inputValue && this.tags.indexOf(target) &#61;&#61;&#61; -1) {this.tags.push(target);this.inputValue&#61;&#39;&#39;;this.showInput();}else{this.inputValue &#61; &#39;&#39;;this.inputVisible &#61; false;}}onCloseTagInArray(){this.skipClick &#61; true;}
    }export class CcTag{public text:string;public value:string;public visible:boolean;
    }


推荐阅读
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 深入解析 Django 中用户模型的自定义方法与技巧 ... [详细]
  • 深入解析:Explain命令的应用与字段详解
    深入解析:Explain命令的应用与字段详解 ... [详细]
  • 本文将详细介绍在Android应用中添加自定义返回按钮的方法,帮助开发者更好地理解和实现这一功能。通过具体的代码示例和步骤说明,本文旨在为初学者提供清晰的指导,确保他们在开发过程中能够顺利集成返回按钮,提升用户体验。 ... [详细]
  • 本文探讨了在Android应用中实现动态滚动文本显示控件的优化方法。通过详细分析焦点管理机制,特别是通过设置返回值为`true`来确保焦点不会被其他控件抢占,从而提升滚动文本的流畅性和用户体验。具体实现中,对`MarqueeText.java`进行了代码层面的优化,增强了控件的稳定性和兼容性。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • MongoDB Aggregates.group() 方法详解与编程实例 ... [详细]
  • 开发心得:深入探讨Servlet、Dubbo与MyBatis中的责任链模式应用
    开发心得:深入探讨Servlet、Dubbo与MyBatis中的责任链模式应用 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 本文深入探讨了数据库性能优化与管理策略,通过实例分析和理论研究,详细阐述了如何有效提升数据库系统的响应速度和处理能力。文章首先介绍了数据库性能优化的基本原则和常用技术,包括索引优化、查询优化和存储管理等。接着,结合实际应用场景,讨论了如何利用容器化技术(如Docker)来部署和管理数据库,以提高系统的可扩展性和稳定性。最后,文章还提供了具体的配置示例和最佳实践,帮助读者在实际工作中更好地应用这些策略。 ... [详细]
  • 本课程详细介绍了如何使用Python Flask框架从零开始构建鱼书应用,涵盖高级编程技巧和实战项目。通过视频教学,学员将学习到Flask的高效用法,包括数据库事务处理和书籍交易模型的实现。特别感谢AI资源网提供的课程下载支持。 ... [详细]
  • 本文详细解析了 MySQL 5.7.20 版本中二进制日志(binlog)崩溃恢复机制的工作流程。假设使用 InnoDB 存储引擎,并且启用了 `sync_binlog=1` 配置,文章深入探讨了在系统崩溃后如何通过 binlog 进行数据恢复,确保数据的一致性和完整性。 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 深入解析Spring Boot自动配置机制及其核心原理
    Spring Boot 的自动配置机制是其核心特性之一,旨在简化开发过程并提高效率。本文将深入探讨这一机制的工作原理,解释其如何通过智能化的类路径扫描和条件注解实现自动装配。通过对 Spring Boot 自动配置的详细解析,读者将能够更好地理解和应用这一强大功能,从而在实际项目中更加高效地利用 Spring Boot。 ... [详细]
author-avatar
16_阿PIE覀_295
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有