vue-tags-input 组件使用指南
本文转载于 SegmentFault 社区
A tags input component for VueJS
前言
在开发xxx管理系统过程中,发现有多处需要用到在input输入框中输入标签的需求,于是提取关键词vue input tags搜索了相关组件,最后发现@johmun/vue-tags-input体积小,易上手,功能丰富,更能满足业务需求和后续可能的需求变更。于是总结了该组件的使用方法,方便学习和后续开发需要。
官方文档
-
http://www.vue-tags-input.com -
https://github.com/JohMun/vue-tags-input -
https://www.npmjs.com/package/@johmun/vue-tags-input
特点
-
无需安装其他依赖 -
体积小:34kb minified (css included) | gzipped 9kb -
快速上手 -
添加之后可以编辑 -
使用删除键删除标签 -
通过粘贴添加标签 -
钩子函数:添加之前/删除之前 -
自定义验证规则 -
丰富的自定义配置 -
自定义模版 -
自动补全 -
文档清晰,示例丰富
安装
npm
npm install @johmun/vue-tags-input --saveCDN
通过CDN引入vue-tags-input时,会自动注册为vue全局组件。
<script ></script>
使用
基本使用
<template><div><vue-tags-inputv-model="tag":tags="tags"@tags-changed="newTags => tags = newTags"/></div></template><script>import VueTagsInput from '@johmun/vue-tags-input';export default {components: {VueTagsInput},data() {return {// 当前编辑的标签tag: '',// 已添加的标签tags: []};},};</script>
验证规则
添加自定义验证规则,需要设置validation属性,validation值是数组类型,每一个元素都是一个对象,包含classes和rule两个基础属性。
rule可以是正则,也可以是函数。当输入的文本匹配上对应的验证规则时,classes会被添加到标签对应的元素CSS class上。验证通过,则会自动添加ti-validCSS class,否则会自动添加ti-invalid。
默认地,验证不通过的标签也会被添加到已添加的标签数组中。如果验证规则中包含disableAdd: true属性,则验证不通过的标签不会被添加。
<template><vue-tags-inputv-model="tag":tags="tags":validation="validation"@tags-changed="newTags => tags = newTags"/></template><script>import VueTagsInput from '@johmun/vue-tags-input';export default {components: {VueTagsInput,},data() {return {// 当前编辑的标签tag: '',// 已添加的标签tags: [],// 验证规则validation: [{classes: 'min-length',rule: tag => tag.text.length < 8,}, {classes: 'no-numbers',rule: /^([^0-9]*)$/,}, {classes: 'avoid-item',rule: /^(?!Cannot).*$/,disableAdd: true,}, {classes: 'no-braces',rule: ({ text }) => text.indexOf('{') !== -1 || text.indexOf('}') !== -1}]};}};</script>
钩子函数
<template><vue-tags-inputv-model="tag":tags="tags"@before-adding-tag="checkTag"@tags-changed="newTags => tags = newTags"/></template><script>import VueTagsInput from '@johmun/vue-tags-input';export default {components: {VueTagsInput,},data() {return {// 当前编辑的标签tag: '',// 已添加的标签tags: []};},methods: {checkTag(obj) {// 添加之前验证输入的文本是否包含字符'e'if (obj.tag.text.includes('e')) {// 如果包含,则显示警告提示alert('Letter "e" is forbidden');} else {// 如果不包含,则添加标签obj.addTag();}}}};</script>
属性配置
简单封装
<template><vue-tags-inputv-model.trim="tag":tags="tags":max-tags="maxTags":placeholder="placeholder":separators="separators"@before-adding-tag="beforeAddingTag"@before-deleting-tag="boforeDeletingTag"@tags-changed="newTags => $emit('update:tags', newTags)"/></template><script>import VueTagsInput from "@johmun/vue-tags-input";export default {name: "BaseInputTags",components: { VueTagsInput },props: {tags: {type: Array,default() {return [];}},placeholder: {type: String,default: "请输入标签"},maxTags: {type: Number,default: 100},beforeAddingTag: {type: Function,default: obj => obj.addTag()},beforeDeletingTag: {type: Function,default: obj => obj.deleteTag()}},data() {return {tag: "",separators: [";", ",", ","]};}};</script>
调用
<template><base-input-tags :tags.sync="tags" /></template><script>import BaseInputTags from "@/components/base/BaseInputTags"export default {components: { BaseInputTags },data() {return {tags: []}}}</script>
- END -
