Skip to content

Mentions 提及

规则

基础示例

js
const rule = {
    type:"aMentions",
    title:"提及",
    field:"mention",
    modelField: "value",
    value: "hello @Jeremy",
    props: {
        options: [
            {
                label: 'Fuphoenixes',
                value: 'Fuphoenixes',
            },
            {
                label: 'kooriookami',
                value: 'kooriookami',
            },
            {
                label: 'Jeremy',
                value: 'Jeremy',
            },
            {
                label: 'btea',
                value: 'btea',
            }
        ]
    }
}

Props 配置示例

自定义触发前缀

js
const rule = {
    type:"aMentions",
    title:"@用户",
    field:"content",
    modelField: "value",
    value: "",
    props: {
        prefix: '#',
        options: [
            {label: '话题1', value: 'topic1'},
            {label: '话题2', value: 'topic2'},
        ],
        placeholder: "输入 # 提及话题",
    },
}

远程加载选项

js
const rule = {
    type:"aMentions",
    title:"@用户",
    field:"content",
    modelField: "value",
    value: "",
    inject: true,
    props: {
        prefix: '@',
        options: [],
        placeholder: "输入 @ 提及用户",
    },
    on: {
        search: ($inject, value, prefix) => {
            // 远程搜索用户
            if (prefix === '@' && value) {
                searchUsers(value).then(res => {
                    $inject.self.props.options = res.data.map(user => ({
                        label: user.name,
                        value: user.id
                    }));
                });
            }
        },
    },
}

Events 事件示例

监听提及事件

js
const rule = {
    type:"aMentions",
    title:"评论",
    field:"comment",
    modelField: "value",
    value: "",
    props: {
        prefix: '@',
        options: [
            {label: '张三', value: '1'},
            {label: '李四', value: '2'},
        ],
    },
    on: {
        search: (value, prefix) => {
            console.log('搜索提及:', value, prefix);
        },
        select: (option, prefix) => {
            console.log('选择提及:', option, prefix);
        },
        change: (value) => {
            console.log('内容改变:', value);
        },
        focus: () => {
            console.log('获得焦点');
        },
        blur: () => {
            console.log('失去焦点');
        },
    },
}

完整配置项:Ant-design-vue_Mentions

value :Number

Props

参数说明类型默认值
autofocus自动获得焦点booleanfalse
filterOption自定义过滤逻辑false | (input: string, option: OptionProps) => boolean
getPopupContainer指定建议框挂载的 HTML 节点() => HTMLElement
notFoundContent当下拉列表为空时显示的内容string | slot'Not Found'
placement弹出层展示位置topbottom
prefix设置触发关键字string | string[]'@'
split设置选中项前后分隔符string' '
status设置校验状态'error' | 'warning'-
validateSearch自定义触发验证逻辑(text: string, props: MentionsProps) => void
options选项配置Options[]
option通过 option 插槽,自定义节点v-slot:option="option"-

Events

事件名称说明回调参数
blur失去焦点的时回调function
change值改变时触发function(value: string)
focus获得焦点时回调function
search文本框值变化时回调function(value: string, prefix: string)
select选择选项时触发function(option: OptionProps, prefix: string)

Option

参数说明类型默认值
value选择时填充的值stringnumber
label选项的标题VueNode(o: Option)=> VueNode
disabled是否可选boolean-
classcss 类名string-
style选项样式CSSProperties-
payload其它数据object-

FormCreate 是一个开源项目,基于 MIT 许可证发布,欢迎个人和企业用户免费使用