vue-tags-input组件使用指南(推荐)

前言

在开发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 --save

CDN

通过CDN引入vue-tags-input时,会自动注册为vue全局组件。

<script src="https://unpkg.com/@johmun/vue-tags-input/dist/vue-tags-input.js">
</script>

使用基本使用

<template>
 <div>
  <vue-tags-input
   v-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值是数组类型,每一个元素都是一个对象,包含classesrule两个基础属性。

rule可以是正则,也可以是函数。当输入的文本匹配上对应的验证规则时,classes会被添加到标签对应的元素CSS class上。验证通过,则会自动添加ti-validCSS class,否则会自动添加ti-invalid

默认地,验证不通过的标签也会被添加到已添加的标签数组中。如果验证规则中包含disableAdd: true属性,则验证不通过的标签不会被添加。

<template>
  <vue-tags-input
  v-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>

 钩子函数

钩子函数 参数 描述
before-adding-tag Object {tag: Object, addTag: Function} 添加标签之前触发,如果调用obj.addTag(),则添加标签,否则不添加
before-deleting-tag Object {tag: Object, index: Number, deleteTag: Function} 删除标签之前触发,如果调用obj.deleteTag(),则删除标签,否则不删除

<template>
  <vue-tags-input
  v-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>

属性配置

属性名 说明 类型 默认值
add-from-paste 是否可以通过粘贴文本到input控件中来添加标签 Boolean true
add-on-blur 当input控件中有值并且失去焦点时,是否自动添加标签 Boolean true
add-on-key 触发添加标签的keyCode或者字符,默认按enter键添加 Array [13]
allow-edit-tags 是否允许编辑已添加的标签 Boolean false
avoid-adding-duplicates 是否禁止添加重复的标签 Boolean true
delete-on-backspace 是否可以按delete键删除标签 Boolean true
max-tags 可以添加的最大标签数 Number -
maxlength input可以输入的最大字符数 Number -
separators 定义分割一串字符串成多个标签的分隔符,默认为分号 Array [";"]
validation 自定义验证规则,可以包含classes和rule,disableAdd基础属性,也可以包含自定义属性 Array [{classes: String, rule: RegExp/Function, disableAdd: Boolean}] [ ]

简单封装

<template>
 <vue-tags-input
  v-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>

总结

到此这篇关于vue-tags-input组件使用指南的文章就介绍到这了,更多相关vue tags input组件使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue使用zTree插件封装树组件操作示例

    本文实例讲述了Vue使用zTree插件封装树组件操作.分享给大家供大家参考,具体如下: 1.通过npm安装jquery npm install jquery --save-dev 2.在build/webpack.base.conf文件当中引入jquery module.exports = { ... resolve: { extensions: ['.js', '.vue', '.json'], alias: { 'vue$': 'vue/dist/vue.esm.js', '@': reso

  • 详解VUE项目中安装和使用vant组件

    Vant 是有赞前端团队基于有赞统一的规范实现的 Vue 组件库,提供了一整套 UI 基础组件和业务组件. 特性 50+ 个经过有赞线上业务检验的组件 单元测试覆盖率超过 90% 完善的中英文文档和示例 支持babel-plugin-import 支持 TypeScript 支持 SSR 组件中文文档地址:https://youzan.github.io/vant/#/zh-CN/intro 1.创建VUE项目之后进入项目目录运行安装命令: npm i vant -S 2.安装 babel-pl

  • vue 组件中使用 transition 和 transition-group实现过渡动画

    前言 记一次vue 组件中使用 transition 和 transition-group 设置过渡动画,总结来说可分为分为 name 版, js 钩子操作类名版, js 钩子操作行内样式版... template模板结构 // 单个元素 <transition name="自定义名字"> <p v-if="show">hello</p> </transition> // 列表元素: 注意group的直接子元素是v-f

  • 使用vue实现各类弹出框组件

    简单介绍一下vue中常用dialog组件的封装: 实现动态传入内容,实现取消,确认等回调函数. 首先写一个基本的弹窗样式,如上图所示. 在需要用到弹窗的地方中引入组件: import dialogBar from './dialog.vue' components:{ 'dialog-bar': dialogBar, }, <dialog-bar></dialog-bar> 点击一个按钮显示弹窗,并保证关闭弹窗后再次点击依旧显示 在弹窗组件中定义一个value值:v-model=&

  • vue-tags-input组件使用指南(推荐)

    前言 在开发xxx管理系统过程中,发现有多处需要用到在input输入框中输入标签的需求,于是提取关键词vue input tags搜索了相关组件,最后发现@johmun/vue-tags-input体积小,易上手,功能丰富,更能满足业务需求和后续可能的需求变更.于是总结了该组件的使用方法,方便学习和后续开发需要. 官方文档 http://www.vue-tags-input.com https://github.com/JohMun/vue-tags-input https://www.npmj

  • Vue项目打包优化实践指南(推荐!)

    目录 业务背景 项目打包时间分析方法 优化配置的基本思路 前置操作,先通过 webpack-bundle-analyzer 查看资源树 1.vue.config.js 文件中修改:productionSourceMap 为 false 2.针对首屏请求数进行优化—关闭 Prefetch,关闭 preload 一.采用路由懒加载 二.element-ui 组件按需加载 1.在 vue-cli3 项目中,如果没有 babel.config.js,则需要安装 Babel: 2.按照官网文档安装 3.b

  • vue实现一个获取按键展示快捷键效果的Input组件

    遇到一个需求,页面内要自定义快捷键,这就需要可以有地方设置和展示快捷键,找了一圈Element UI发现没有能稍微改改就能用的组件,所以自己动手写了一个. 这个只有快捷键展示功能,快捷键实际绑定生效的话是依赖传回的快捷键数据,由另外的组件处理的.目前只测试了Chrome的环境. 效果如下: 关键点 虽然看起来像是一个Input但在组件内实际上是展示一个标签效果,还需要有删除按钮.这就得在输入框内放下html代码,浏览器的Input组件显然不适合,这就只能自己仿一个类Input组件效果了. foc

  • Vue中封装input组件的实例详解

    Vue中封装input组件 最近有点忙不过来 脱了很久,没有更新 抱歉.今天要将的时如何自定义封装input组件 ,博主知识发个简单的模板 码友们可以更具自己的实际项目添加需要的参数 我的项目中的UI图是这样的 代码如下 子组件的模板设置 <template> <div class="completion-input-box"> <span class="input-box-name">{{text}}</span>

  • 浅析vue cli3 封装Svgicon组件正确姿势(推荐)

    vue cli3 手把手教学封装Svgicon组件 第一步:在src文件下新建一个放置svg文件的文件夹 第二步:在components文件下新建一个Svg组件 这是一个 文件夹 专门用来存放项目里面需要使用的svg文件,比如 a.svg b.svg - svg组件源码 <template> <svg :class="svgClass" aria-hidden="true"> <use :xlink:href="iconNam

  • Vue使用antd中input组件去验证输入框输入内容(rules 案例)

    目录 效果图 示例代码 效果图 示例代码 <a-form-model-item prop="phone"> <a-input v-model="form.phone" :maxLength="11" placeholder="手机号" /> </a-form-model-item> <a-form-model-item prop="code"> <a-i

  • ant-design-vue 快速避坑指南(推荐)

    ant-design-vue是蚂蚁金服 Ant Design 官方唯一推荐的Vue版UI组件库,它其实是Ant Design的Vue实现,组件的风格与Ant Design保持同步,组件的html结构和css样式也保持一致. 用下来发现它的确称得上为数不多的完整的VUE组件库与开发方案集成项目. 本文主要目的是总结一些开发过程中比较耗时间去查找,文档中没有具体说明的常见问题,同时希望能给新上手此框架的同学提供一些参考作用. 1.Table对接后台返回数据 针对Table数据格式与后他接口返回数据格

  • Vue实现PopupWindow组件详解

    这段时间一直在学习前端技术来完成自己的小项目.在js方面就使用了Vue框架.由于在项目里想实现一个新建地址的PopupWindow效果,便想到可以使用Vue的一些特性来实现. 用到的Vue特性:组件(Component),props传值,slot内容插入,transitions过渡动画,x-templete模板. 直接上代码(完整代码可在链接中下载popupwindow): html代码(无样式): <div id="address-choose"> <div>

  • Vue.js 父子组件通信的十种方式

    面试官:Vue 中父子组件通信有哪些方式? 自己先想一分钟. 无可否认,现在无论大厂还是小厂都已经用上了Vue.js 框架,简单易上手不说,教程详尽,社区活跃,第三方套件还多.真的是前端开发人员必备技能.而且在面试当中也往往会问到关于 Vue 方面的各种问题,其中大部分面试官会问到如上这种问题. 最近一直在做 Vue项目代码层面上的优化,说实话,优化别人的代码真是件痛苦的事情,功能实现尚且不说,就说代码规范我就能再写出一篇文章来.真的是无规范不成方圆,规范这个东西太重要了!有点扯了,回到主题,咳

  • vue 扩展现有组件的操作

    1. 使用vue.mixin全局混入 混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项.mixins 选项接受一个混合对象的数组. 混入的主要用途 1.在你已经写好了构造器后,需要增加方法或者临时的活动时使用的方法,这时用混入会减少源代码的污染. 2.很多地方都会用到的公用方法,用混入的方法可以减少代码量,实现代码重用. <h1>Mixins</h1> <

随机推荐