New:Microsoft Teams Notifications Are Now Available in Socket.Learn more
Get Started

@thtf/vue-autocomplete

Package Overview
Dependencies
Maintainers
2
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@thtf/vue-autocomplete

a autocomplete textarea component for Vue

npmnpm
Version
1.0.4
Version published
Weekly downloads
26
2500%
Maintainers
2
Weekly downloads
 
Created
Source

自动提示文本组件

依赖

Vue 2.6.10+

安装

npm install @thtf/vue-autocomplete

快速上手

// 使用组件
<template>
  <p>本地测试</p>
  <div style="height: 300px; width: 500px;">
    <thtf-autocomplete v-model="extractsLocal"
                  :content="content"
                  :rules="rulesLocal"
                  @matched="matchedLocal"
                  @change="getContent"/>
  </div>
  <p>远程测试</p>
  <div style="height: 300px; width: 500px;">
    <thtf-autocomplete v-model="extracts"
                  remote
                  :rules="rules"
                  :options="options"
                  :loading="loading"
                  @matched="matched"/>
</template>
<script>
// 安装组件
import ThtfAutocomplete from '@thtf/vue-autocomplete'

// 引用组件
export default {
  components: {
    ThtfAutocomplete
  },
  data () {
    return {
        content: '<p class="text">[<span data-value="foo1"> 指标1 </span>&amp;<span data-value="bar1"> 时点1 </span>&amp;<span data-value="foobar1"> 计量单位1 ]</span></p>',
        // 本地相关参数
        extractsLocal: [],
        rulesLocal: [
          {
            rule: /\[/,
            enterAdd: '&',
            data: [
              {
                label: '指标1',
                value: 'foo1',
                children: [
                  {
                    label: '时点1',
                    value: 'bar1',
                    children: [
                      { label: '计量单位1', value: 'foobar1' },
                      { label: '计量单位2', value: 'foobar2' },
                      { label: '计量单位3', value: 'foobar3' }
                    ]
                  },
                  { label: '时点2', value: 'bar2' },
                  { label: '时点3', value: 'bar3' }
                ]
              },
              { label: '指标2', value: 'foo2' },
              { label: '指标3', value: 'foo3' }
            ]
          },
          {
            rule: /{/,
            enterAdd: '&'
          }
        ],
        // 远程相关参数
        loading: false,
        options: [],
        extracts: [],
        rules: [
          {
            rule: /\[/,
            enterAdd: '&'
          },
          {
            rule: /{/,
            enterAdd: '&'
          }
        ]
      }
  },
  methods: {
    // 本地回调事件
    matchedLocal (rule, query, row) {
      // console.log(`rule ${JSON.stringify(rule)}`)
      // console.log(`query ${JSON.stringify(query)}`)
      // console.log(`row ${JSON.stringify(row)}`)
    },
    // 获取内容
    getContent (value) {
      console.log(value)
    },
    // -------------------------------------------------
    // 远程回调事件
    matched (rule, query, row) {
      console.log(`rule ${JSON.stringify(rule)}`)
      console.log(`query ${JSON.stringify(query)}`)
      // console.log(`row ${JSON.stringify(row)}`)
      if (row) {
        // 调用后台接口获取数据
        this.loading = true
        // 模拟查询条件。
        // 如果 query 为空,返回指标的相关数据
        // 如果 query 为foox,即指标相关的值,则返回时点的相关数据
        // 如果 query 为 [foox, barx],即指标和时点相关的值,则返回计量单位的相关数据
        let params = null
        if (query.length === 0) {
          params = 1
        } else if (query.length === 1) {
          params = 2
        } else if (query.length === 2) {
          params = 3
        }
        this.getData(params).then(response => {
          this.loading = false
          this.options = response
        })
      }
    },
    // 模拟后台接口
    getData (params) {
      const mockData = {
        1: [{ label: '指标1', value: 'foo1' }, { label: '指标2', value: 'foo2' }, { label: '指标3', value: 'foo3' }],
        2: [{ label: '时点1', value: 'bar1' }, { label: '时点2', value: 'bar2' }, { label: '时点3', value: 'bar3' }],
        3: [{ label: '计量单位1', value: 'foobar1' }, { label: '计量单位2', value: 'foobar2' }, { label: '计量单位3', value: 'foobar3' }]
      }
      return new Promise(resolve => {
        setTimeout(() => {
          resolve(mockData[params])
        }, 100)
      })
    }
  }
}
</script>

@thtf/vue-autocomplete Attributes

参数说明类型可选值默认值
rules匹配规则array--
debounce输入时防抖等待时间Number-300
minWidthsuggester 最小宽度string-180px
remote是否为远程远程匹配Boolean-false
loadingremote为true时,是否正在从远程获取数据Boolean-false
optionsremote为true时,远程获取数据列表Array-[]

rules Attributes

参数说明类型可选值默认值
rule匹配规则正则--
enterAdd选中item时 向末尾添加的字符string-空格
enterExtract选中item时 是否提取内容array-true
data匹配规则成功时,suggester显示列表,remote为true时无效array-[]

@thtf/vue-autocomplete Methods

方法名说明参数
change触发匹配的方法-

@thtf/vue-autocomplete Events

方法名说明回调参数
matched匹配成功时触发匹配规则对应的字符串,匹配内容,规则对象
change获取内容文本内容

Keywords

vue

FAQs

Package last updated on 03 Nov 2021

Related posts