Yb-components Yb-components
首页
开发规范
yb-cli
  • 开发指南
  • 更新日志
  • 组件
关于
首页
开发规范
yb-cli
  • 开发指南
  • 更新日志
  • 组件
关于
  • 开发指南
  • 更新日志
  • 数据展示

    • YbTable 表格
    • YbCardList 卡片列表
    • YbTree 树
    • YbCascaderList 级联列表
    • YbSimpleTablePage 分页查询表格
    • YbSimpleCardPage 分页卡片列表
    • YbBasicProfile 基础详情数据展示
    • YbOutscrollLayout 固定在滚动区域外
    • YbOutscrollTree 固定在滚动区域外的Tree
    • YbInfoLayout 信息页布局
    • YbEditLayout 编辑页布局
  • 数据录入

    • YbRowsPopoverForm 浮层多行表单
    • YbFormily 配置式表单
    • YbForm 表单
    • YbRowsForm 多行表单
    • YbCollapseForm 折叠表单
    • YbQueryFilter 筛选表单
    • YbFilesSelect 文件选择器
    • YbRangeWrapper 范围结构
    • YbRangeDatepicker 日期范围
    • YbRange 范围
    • YbFormulaInput 简单运算公式输入
    • YbCron 表达式生成器
    • YbTreeSelect 树型选择器
    • YbInputgroupWrapper 复合组
    • YbThemeSelect 主题风格选择器
    • YbSelect 选择器
    • YbPaginationSelect 分页选择器
    • YbCodemirror 代码编辑器
    • YbCodemirrorSql SQL编辑器
    • YbCodemirrorJson JSON编辑器
    • YbCodemirrorXml XML编辑器
    • YbCombiDatepicker 组合时间
    • YbQuarterPicker 季度选择器
    • YbRangeQuarterPicker 季度范围选择器
    • YbConditionSelect 条件选择器
    • YbCheckboxGroup 多选框组
    • YbIconSelect 选择器
    • YbTagsInput 标签输入框
    • 其他组件

      • YbBallLoading 加载中
      • YbSymbolIcon 多色小图标
      • YbKeybuttonsPopover
      • YbPercentBattery 电池百分比
      • YbAffix 固钉
      • YbPagination 分页器
      • YbCollapse 折叠面板
      • YbScrollTool 滚动工具
    • 物料

      • YbMainSideMenu 侧栏菜单
      • YbLoadRemote 远程应用加载
      • YbLayoutPro 布局
      • YbMainPro 主页
      • YbAppMain 应用主页
      • YbAppLogin 普通登录页
      • YbAppPortal Portal登录页
    • 指令

      • v-fixed-in-scroller
    • Mixins

      • pageList_mixin
      • getScopedSlot_mixin
      • editFormPage_mixin
      • uploadProgressPage_mixin
      • rowActions_mixin
      • rowDeletes_mixin
      • drawerToRouterTab_mixin
    • 实验室

      • YbSwiper 轮播
    • 组件
    • 数据录入
    zougt
    2025-03-10

    YbTagsInput 标签输入框

    # 基本使用

    敲击回车键后,输入内容将成为标签。标签内容如果为空串或者纯空格时,则会被过滤。

    酒店 抖音 +0
    <template>
        <div>
            <div style="width: 100%">
                <yb-tags-input
                    ref="tagsInput"
                    v-model="tags"
                    clearable
                    @change="change"
                >
                </yb-tags-input>
            </div>
        </div>
    </template>
    <script>
        export default {
            data() {
                return {
                    tags: ['酒店', '抖音'], // 父组件中的标签数据
                };
            },
            // mounted() {
            //     setTimeout(() => {
            //         this.tags = ['好运来', '迷糊'];
            //     }, 4000);
            // },
            methods: {
                change() {
                    console.log('变化', this.tags);
                },
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    显示 复制 复制

    # 批量添加

    可以使用 separators 设置分隔符,来实现批量输入,默认支持空格、英文逗号、英文分号。

    酒店 抖音 +0
    <template>
        <div>
            <div style="width: 100%">
                <yb-tags-input
                    ref="tagsInput"
                    v-model="tags"
                    placeholder="请输入文本"
                    :separators="[',',' ',';']"
                    @change="change"
                >
                </yb-tags-input>
            </div>
        </div>
    </template>
    <script>
        export default {
            data() {
                return {
                    tags: ['酒店', '抖音'], // 父组件中的标签数据
                };
            },
            methods: {
                change() {
                    console.log('变化');
                },
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    显示 复制 复制

    # 允许一键清空

    clearable 属性控制是否显示全部清除按钮

    酒店 抖音 +0
    <template>
        <div style="width: 100%">
            <yb-tags-input
                v-model="tags"
                :clearable="true"
                placeholder="可一键清除"
                @clearAll="clearAll"
                @change="change"
                @tagRemove="tagRemove"
            />
        </div>
    </template>
    <script>
        export default {
            data() {
                return {
                    tags: ['酒店', '抖音'], // 父组件中的标签数据
                };
            },
            methods: {
                clearAll() {
                    console.log(this.tags, 'clearAll');
                },
                change() {
                    console.log(this.tags, 'change');
                },
                tagRemove(str) {
                    console.log(str, this.tags, 'tagRemove');
                },
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    显示 复制 复制

    # 禁用状态

    disabled 属性控制是否禁用标签输入框。

    酒店 抖音 +0
    <template>
        <div style="width: 100%">
            <yb-tags-input v-model="tags" disabled />
        </div>
    </template>
    <script>
        export default {
            data() {
                return {
                    tags: ['酒店', '抖音'], // 父组件中的标签数据
                };
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    显示 复制 复制

    # 尺寸大小

    可使用 size 设置输入框和标签的大小。

    +0

    +0

    +0
    <template>
        <div style="width: 100%">
            <yb-tags-input size="mini" placeholder="mini" />
            <br />
            <yb-tags-input size="small" placeholder="small" />
            <br />
            <yb-tags-input size="medium" placeholder="medium" />
        </div>
    </template>
    <script>
        export default {
            data() {
                return {};
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    显示 复制 复制

    # 失焦后自动创建标签

    addOnBlur 属性控制是否失焦后自动创建标签,默认开启。

    酒店 抖音 +0
    +0
    <template>
        <div style="width: 100%">
            <yb-tags-input
                v-model="tags"
                addOnBlur
                placeholder="请输入..."
                style="margin-bottom:10px"
            />
            <yb-tags-input
                v-model="tags2"
                :addOnBlur="false"
                placeholder="请输入文本后回车"
            />
        </div>
    </template>
    <script>
        export default {
            data() {
                return {
                    tags: ['酒店', '抖音'],
                    tags2: [],
                };
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    显示 复制 复制

    # 过滤重复标签

    可使用 allowDuplicates,设置是否允许创建相同 tag,默认为 true。

    +0
    +0
    <template>
        <div style="width: 100%">
            <yb-tags-input
                v-model="tags"
                allowDuplicates
                placeholder="请输入..."
                style="margin-bottom:10px"
            />
            <yb-tags-input
                v-model="tags2"
                :allowDuplicates="false"
                placeholder="不允许创建相同文本的标签"
            />
        </div>
    </template>
    <script>
        export default {
            data() {
                return {
                    tags: [],
                    tags2: [],
                };
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    显示 复制 复制

    # 输入限制

    可使用 max 限制输入的标签数量,超出后将不允许再输入,并且触发 exceed 事件。

    可使用 maxLength 限制单个标签的最大长度,超出后将不允许再输入,并且触发 inputExceed 事件。

    +0


    +0
    <template>
        <div style="width: 100%">
            <yb-tags-input
                :max="3"
                @exceed="exceed"
                placeholder="最多输入3条标签..."
            />
            <br /><br />
            <yb-tags-input
                :maxLength="5"
                @inputExceed="inputExceed"
                placeholder="单个标签长度不可超过5..."
            />
        </div>
    </template>
    <script>
        export default {
            data() {
                return {
                    exceed() {},
                    inputExceed() {},
                };
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    显示 复制 复制

    # 限制标签展示数量

    用 maxTagCount 可以限制展示的标签数量,超出部分将以 +N 的方式展示。

    酒店 抖音 +1
    <template>
        <div style="width: 100%">
            <yb-tags-input
                v-model="tags"
                :maxTagCount="2"
                placeholder="请输入..."
            />
        </div>
    </template>
    <script>
        export default {
            data() {
                return {
                    tags: ['酒店', '抖音', '美食'], // 父组件中的标签数据
                };
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    显示 复制 复制

    # 事件触发

    酒店 抖音 +0
    <template>
        <div>
            <div style="width: 100%">
                <yb-tags-input
                    ref="tagsInput"
                    v-model="tags"
                    placeholder="请输入标签"
                    :inputValue="inputValue"
                    :draggable="true"
                    :max="3"
                    :maxLength="5"
                    clearable
                    @change="change"
                    @inputChange="inputChange"
                    @tagAdd="tagAdd"
                    @tagRemove="tagRemove"
                    @draggable="draggable"
                    @exceed="exceed"
                    @inputExceed="inputExceed"
                    @clearAll="clearAll"
                >
                </yb-tags-input>
            </div>
        </div>
    </template>
    <script>
        export default {
            data() {
                return {
                    tags: ['酒店', '抖音'], // 父组件中的标签数据
                    inputValue: '文本内容',
                };
            },
            methods: {
                // 标签关闭方法
                tagRemove(tag) {
                    console.log('标签关闭', tag);
                },
    
                tagAdd(tag) {
                    console.log('添加', tag);
                },
    
                change() {
                    console.log('变化');
                },
    
                inputChange(value) {
                    console.log('输入框变化');
                    this.inputValue = value;
                },
    
                draggable(tag) {
                    console.log('拖拽排序', tag);
                },
    
                exceed(tag) {
                    console.log('最大标签数', tag);
                },
    
                inputExceed() {
                    console.log('最大标签长度');
                },
    
                clearAll() {
                    console.log('一键清除');
                },
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    显示 复制 复制

    # 聚焦

    可使用 inputValue 设置标签内容。

    酒店 抖音 +0
    <template>
        <div style="width: 100%">
            <yb-tags-input v-model="tags" ref="tagsInput" inputValue="默认文本" />
            <div style="margin-top: 10px;">
                <el-button @click="focus">聚焦</el-button>
            </div>
        </div>
    </template>
    <script>
        export default {
            data() {
                return {
                    tags: ['酒店', '抖音'], // 父组件中的标签数据
                };
            },
            methods: {
                focus() {
                    this.$refs.tagsInput.focus();
                },
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    显示 复制 复制

    # 标签文本插槽

    酒店
    抖音
    +0
    <template>
        <div style="width: 100%">
            <yb-tags-input v-model="tags" ref="tagsInput" placeholder="输入...">
                <template v-slot:tag="{ text, index }">
                    <div style="color: blue" class="tag-item">{{text}}</div>
                </template>
            </yb-tags-input>
        </div>
    </template>
    <script>
        export default {
            data() {
                return {
                    tags: ['酒店', '抖音'], // 父组件中的标签数据
                };
            },
            methods: {},
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    显示 复制 复制

    # 拖拽排序

    将 draggable 设为 true,开启拖拽排序功能

    酒店 抖音 +0
    <template>
        <div style="width: 100%">
            <yb-tags-input
                v-model="tags"
                ref="tagsInput"
                placeholder="输入..."
                draggable
                @drag="drag"
            >
            </yb-tags-input>
        </div>
    </template>
    <script>
        export default {
            data() {
                return {
                    tags: ['酒店', '抖音'], // 父组件中的标签数据
                };
            },
            methods: {
                drag(tags) {
                    console.log('拖拽排序', tags);
                },
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    显示 复制 复制

    # 在表单中使用

    属性

    label-width
    label-position
    label-suffix
    size
    disabled
    inline
    hide-required-asterisk
    show-message
    inline-message
    status-icon

    表单

    <template>
        <el-row>
            <el-col :span="10">
                <h2>属性</h2>
                <div style="margin-bottom:20px">
                    label-width
                    <span
                        style="display:inline-block;width:200px;vertical-align: middle;"
                        ><el-slider
                            v-model="formProps['label-width']"
                            :min="80"
                            :max="240"
                        ></el-slider
                    ></span>
                </div>
                <div style="margin-bottom:20px">
                    label-position
                    <el-radio-group
                        v-model="formProps['label-position']"
                        size="mini"
                    >
                        <el-radio-button label="left">left</el-radio-button>
                        <el-radio-button label="right">right</el-radio-button>
                        <el-radio-button label="top">top</el-radio-button>
                    </el-radio-group>
                </div>
                <div style="margin-bottom:20px">
                    label-suffix
                    <span
                        style="display:inline-block;width:200px;vertical-align: middle;"
                    >
                        <el-input
                            size="small"
                            v-model="formProps['label-suffix']"
                        ></el-input
                    ></span>
                </div>
                <div style="margin-bottom:20px">
                    size
                    <el-radio-group v-model="formProps['size']" size="mini">
                        <el-radio-button label="medium">medium</el-radio-button>
                        <el-radio-button label="small">small</el-radio-button>
                        <el-radio-button label="mini">mini</el-radio-button>
                    </el-radio-group>
                </div>
                <div style="margin-bottom:20px">
                    disabled
                    <el-switch v-model="formProps['disabled']"></el-switch>
                </div>
                <div style="margin-bottom:20px">
                    inline
                    <el-switch v-model="formProps['inline']"></el-switch>
                </div>
                <div style="margin-bottom:20px">
                    hide-required-asterisk
                    <el-switch
                        v-model="formProps['hide-required-asterisk']"
                    ></el-switch>
                </div>
                <div style="margin-bottom:20px">
                    show-message
                    <el-switch v-model="formProps['show-message']"></el-switch>
                </div>
                <div style="margin-bottom:20px">
                    inline-message
                    <el-switch v-model="formProps['inline-message']"></el-switch>
                </div>
                <div style="margin-bottom:20px">
                    status-icon
                    <el-switch v-model="formProps['status-icon']"></el-switch>
                </div>
            </el-col>
            <el-col :span="12">
                <h2>表单</h2>
                <yb-form
                    ref="form"
                    :formItems="formItems"
                    :model="formModel"
                    :rules="rules"
                    :label-width="formProps['label-width']+'px'"
                    :label-position="formProps['label-position']"
                    :size="formProps['size']"
                    :disabled="formProps['disabled']"
                    :inline="formProps['inline']"
                    :label-suffix="formProps['label-suffix']"
                    :status-icon="formProps['status-icon']"
                    :inline-message="formProps['inline-message']"
                    :show-message="formProps['show-message']"
                    :hide-required-asterisk="formProps['hide-required-asterisk']"
                    @submit.native.prevent="onSubmit"
                >
                    <template v-slot:name="formItem">
                        <el-input
                            v-model="formModel[formItem.prop]"
                            clearable
                        ></el-input>
                    </template>
                    <template v-slot:region="formItem">
                        <el-select
                            v-model="formModel[formItem.prop]"
                            placeholder="请选择活动区域"
                            clearable
                        >
                            <el-option label="区域一" value="shanghai"></el-option>
                            <el-option label="区域二" value="beijing"></el-option>
                        </el-select>
                    </template>
                    <template v-slot:tags="formItem">
                        <yb-tags-input
                            v-model="formModel[formItem.prop]"
                            ref="tagsInput"
                            placeholder="请输入标签"
                            clearable
                        />
                    </template>
                    <template v-slot:buttons="formItem">
                        <el-button type="primary" native-type="submit"
                            >立即创建</el-button
                        >
                        <el-button>取消</el-button>
                    </template>
                </yb-form>
            </el-col>
        </el-row>
    </template>
    <script>
        export default {
            data() {
                const formItems = [
                    {
                        label: '活动名称',
                        prop: 'name',
                        rules: [
                            {
                                required: true,
                                message: '请输入活动名称',
                                trigger: 'blur',
                            },
                            {
                                min: 3,
                                max: 5,
                                message: '长度在 3 到 5 个字符',
                                trigger: 'blur',
                            },
                        ],
                    },
                    {
                        label: '标签',
                        prop: 'tags',
                        rules: [
                            {
                                required: true,
                                message: '请输入标签',
                                trigger: ['blur', 'change'],
                            },
                        ],
                    },
                    {
                        label: '活动区域',
                        prop: 'region',
                        rules: [
                            {
                                required: true,
                                message: '请选择活动区域',
                                trigger: 'change',
                            },
                        ],
                    },
                    {
                        label: '',
                        prop: 'buttons',
                    },
                ];
                const formModel = formItems.reduce((tol, item) => {
                    return {
                        ...tol,
                        [item.prop]:
                            typeof item.defaultValue !== 'undefined'
                                ? item.defaultValue
                                : null,
                    };
                }, {});
                return {
                    formItems,
                    formModel,
                    rules: {},
                    formProps: {
                        'label-width': 120,
                        'label-position': 'left',
                        'label-suffix': '',
                        size: 'small',
                        disabled: false,
                        inline: false,
                        'hide-required-asterisk': false,
                        'show-message': true,
                        'inline-message': false,
                        'status-icon': false,
                    },
                };
            },
            mounted() {},
            methods: {
                onSubmit() {
                    this.$refs['form']
                        .getForm()
                        .validate()
                        .then(() => {
                            console.log('验证成功');
                        })
                        .catch((err, errFields) => {
                            console.log('验证失败', err, errFields);
                        });
                },
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    显示 复制 复制

    # YbTagInput Props

    参数 说明 类型 可选值 默认值
    value / v-model 绑定值,用于双向绑定标签数组 String[] -- []
    inputValue 设置输入框的值 String -- ""
    max 允许标签的最大数量 Number -- Infinity
    maxTagCount 标签的最大展示数量,超出后将以 +N 形式展示 Number -- Infinity
    placeholder 输入框的占位默认值 String -- "请输入文本后再回车"
    disabled 是否禁用 Boolean -- false
    addOnBlur 在输入框失去焦点时是否自动添加标签 Boolean -- false
    allowDuplicates 是否允许添加相同 tag Boolean -- true
    draggable 是否启用标签拖拽功能 Boolean -- false
    clearable 是否支持一键删除所有标签和输入内容 Boolean -- false
    separators 批量添加标签的分隔符 [String, Array] -- [",", " ", ";"]
    maxLength 单个标签的最大字符长度 Number -- Infinity
    size 输入框和标签的大小 String mini, small, medium small

    # YbTagInput Events

    事件名称 说明 回调参数
    change 标签数组发生变化时触发 (tags: Array) =>
    tagAdd 添加标签时触发 (newTags: Array, tags: Array)=>
    tagRemove 删除单个标签时触发 (removedTag: String)
    draggable 标签拖拽结束后触发 (tags: Array) =>
    exceed 添加标签超过最大限制时触发 (tags: Array)=>
    inputExceed 输入的标签长度超过限制时触发 (value:String)=>
    clearAll 清除所有标签时触发 (tags: Array)=>
    inputChange 输入框值改变时触发 (value: String) =>

    # YbTagInput Methods

    方法名 说明 参数
    focus 聚焦标签输入框 --

    # SemiTagInput Slots

    插槽名称 说明 默认内容
    tag 用于自定义每个标签的文本内容 默认显示标签文本
    上次更新: 2025/04/07, 10:08:49
    YbIconSelect 选择器
    YbBallLoading 加载中

    ← YbIconSelect 选择器 YbBallLoading 加载中→

    Theme by Vdoing | Copyright © 2021-2025 YB-GZ | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式