dangerouslyUseHTMLString选项来启用自定义 HTML 片段

Old:

js 复制代码
     const msg
     = '切换旧版成功,推荐 <span id="changeMsg" style="color: #47FFF1;; text-decoration: underline;">切换新版</span> 体验最新效果';
     
     const message = ElMessage({
         customClass: 'site-toast',
         dangerouslyUseHTMLString: true,
         message: msg,
         type: 'success',
     });
     // 获取 DOM
     document.getElementById('changeMsg')?.addEventListener('click', () => {
         message.close();
         // 切到新版本
         store.commit('updateOldStyle', []);
     });

New:

使用新的原因:不能直接用addeEventListener,不然重复第二次的时候,点击就无法响应了
h() 函数简介

Vue 提供了一个 h() 函数用于创建 虚拟节点vnodes。

h() 是 hyperscript 的简称------意思是"能生成 HTML (超文本标记语言) 的 JavaScript"。这个名字来源于许多虚拟 DOM 实现默认形成的约定。一个更准确的名称应该是 createVnode(),但当你需要多次使用渲染函数时,一个简短的名字会更省力。

js 复制代码
this.$message({
    customClass: 'site-toast',
     dangerouslyUseHTMLString: true,
     message: h('p', null, [
         h('span', null, '切换旧版成功,推荐 '),
         h('span',
             {
                 onClick: () => {},
                 style: 'color: #47FFF1;text-decoration:underline;cursor:pointer' },
             '切换新版'),
         h('span', null, ' 体验最新效果 '),
     ]),
     type: 'success',
});

h() 函数的使用方式非常的灵活

js 复制代码
const vnode = h('div', { id: 'foo' }, [])

vnode.type // 'div'
vnode.props // { id: 'foo' }
vnode.children // []
vnode.key // null
js 复制代码
// 除了类型必填以外,其他的参数都是可选的
h('div')
h('div', { id: 'foo' })

// attribute 和 property 都能在 prop 中书写
// Vue 会自动将它们分配到正确的位置
h('div', { class: 'bar', innerHTML: 'hello' })

// 像 `.prop` 和 `.attr` 这样的的属性修饰符
// 可以分别通过 `.` 和 `^` 前缀来添加
h('div', { '.name': 'some-name', '^width': '100' })

// 类与样式可以像在模板中一样
// 用数组或对象的形式书写
h('div', { class: [foo, { bar }], style: { color: 'red' } })

// 事件监听器应以 onXxx 的形式书写
h('div', { onClick: () => {} })

// children 可以是一个字符串
h('div', { id: 'foo' }, 'hello')

// 没有 props 时可以省略不写
h('div', 'hello')
h('div', [h('span', 'hello')])

// children 数组可以同时包含 vnodes 与字符串
h('div', ['hello', h('span', 'hello')])

其他

使用a标签去跳转

js 复制代码
const msg ='<a href="***" target="_blank" style="color: #47FFF1;text-decoration: underline;cursor:pointer">点我跳转</a>';

   this.$message({
       customClass: 'site-toast',
       dangerouslyUseHTMLString: true,
       message: `<div style="line-height: 22px;">详情请通过有岑${msg}</div>`,
       iconClass: 'el-message__icon el-icon-error',
   });
}
相关推荐
竹林8181 小时前
用 wagmi v2 + viem 监听链上事件,我踩了三天坑终于搞懂了实时日志与历史补全
javascript
Momo__1 小时前
VueUse createReusableTemplate —— 单文件组件内的模板复用神器
前端·vue.js
只一1 小时前
😭从回调地狱到 async/await:一文打通 Ajax 与 JS 异步编程
javascript
程序员小富1 小时前
我开源了一个开发者专属的智能 JSON 工具,得到了媳妇高度认可
前端·vue.js·后端
小小小小宇1 小时前
程序员如何给 LLM 装工具以及看懂推理过程
前端
写代码的皮筏艇1 小时前
React中的forwardRef
前端·react.js·面试
槑有老呆1 小时前
花三个月工资请了个 AI 程序员,结果它连青岛啤酒股价都查不了
前端
风骏时光牛马1 小时前
Verilog开发常见问题汇总解析
前端
子兮曰1 小时前
AI Coding Method Map:一张图看懂 AI 编程的完整链路
前端·人工智能·后端