iView Notice通知关闭后还能再打开吗? UX树鹤 提问于 2026-02-19 13:27:25 阅读 40 组件 用iView的Notice.info做提示框,点击按钮第一次显示正常,但关闭后再点按钮就没了,控制台也没报错,这是怎么回事? 代码是这样写的:Notice.info({ title: '提示', desc: '内容', duration: 0 }),尝试过把duration改成5,但问题依旧存在。 难道这个组件只能弹一次?或者需要手动销毁?有没有办法让每次点击都能重新弹出? Notice通知 我来解答 赞 4 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 百里旭东 Lv1 能 reopening 的,不是组件只能弹一次,是你每次调用 Notice.info 的时候其实创建了一个新的实例,但如果你之前没等它完全销毁或者重复用了同一个引用,就可能出现“点不动”的假象。 你贴的代码本身没问题,Notice.info({ title: '提示', desc: '内容', duration: 0 }) 是可以反复调用的。我猜你可能是把返回值存下来了,比如: const notice = Notice.info({ title: '提示', desc: '内容', duration: 0 }); 然后后面又去调用 notice.destroy() 或者重复操作,结果实例被关掉后没重新创建。 正确的做法是:每次点击都直接调用 Notice.info(...),不要缓存它的返回值,除非你明确要手动控制它。比如: document.getElementById('btn').addEventListener('click', () => { Notice.info({ title: '提示', desc: '内容', duration: 0 // 这个设为 0 就是不自动关闭,得手动关 }); }); 如果确实要手动关,可以: const n = Notice.info({ title: '提示', desc: '内容', duration: 0 }); setTimeout(() => { n.destroy(); // 手动关掉 }, 3000); 但下次点按钮的时候再重新 Notice.info(...) 一次就行,别复用 n。 我之前也踩过这个坑,以为它像 Modal 一样可以 show/hide,结果发现 Notice 是“一次性的”,但每次调用都会重新开一个,只要别自己手贱销毁完还复用引用就行。 希望能帮到你,如果还有问题可以再贴点你实际的代码片段,我帮你看看是不是其他地方的问题。 回复 点赞 5 2026-02-26 19:09 Des.玉军 Lv1 这个问题的核心在于 Notice 的使用方式。iView 的 Notice 组件默认是单例模式,也就是说同一个通知实例只会显示一次,关闭后不会重新渲染。 要解决这个问题,可以优化成每次点击按钮时都创建一个新的通知实例,而不是复用之前的实例。具体实现上,把 Notice.info 的调用放在一个函数里,每次点击按钮时调用这个函数即可。 代码可以写成这样: function showNotice() { Notice.info({ title: '提示', desc: '内容', duration: 0 }); } // 假设你有一个按钮来触发通知 document.querySelector('#yourButton').addEventListener('click', function() { showNotice(); }); 这里的关键点是每次点击按钮都会调用 showNotice 函数,从而生成一个新的通知实例。这样即使之前的通知被关闭了,新的通知依然能够正常弹出。 如果你觉得每次都写函数有点麻烦,还可以封装一个更通用的方法,比如传入标题和内容作为参数,进一步提升代码的复用性。像这样: function createNotice(title, desc) { Notice.info({ title: title, desc: desc, duration: 0 }); } // 使用时 document.querySelector('#yourButton').addEventListener('click', function() { createNotice('提示', '内容'); }); 这样做不仅解决了问题,还让代码更加优雅和灵活。如果以后需要调整通知的样式或者行为,只需要改 createNotice 函数就可以了。 最后吐槽一句,这种单例模式的设计虽然有它的道理,但确实容易让人踩坑,尤其是文档里没特别强调的时候。希望我的解答能帮你少走点弯路。 回复 点赞 5 2026-02-19 14:01 加载更多 相关推荐
Notice.info的时候其实创建了一个新的实例,但如果你之前没等它完全销毁或者重复用了同一个引用,就可能出现“点不动”的假象。你贴的代码本身没问题,
Notice.info({ title: '提示', desc: '内容', duration: 0 })是可以反复调用的。我猜你可能是把返回值存下来了,比如:然后后面又去调用
notice.destroy()或者重复操作,结果实例被关掉后没重新创建。正确的做法是:每次点击都直接调用
Notice.info(...),不要缓存它的返回值,除非你明确要手动控制它。比如:如果确实要手动关,可以:
但下次点按钮的时候再重新
Notice.info(...)一次就行,别复用n。我之前也踩过这个坑,以为它像 Modal 一样可以 show/hide,结果发现 Notice 是“一次性的”,但每次调用都会重新开一个,只要别自己手贱销毁完还复用引用就行。
希望能帮到你,如果还有问题可以再贴点你实际的代码片段,我帮你看看是不是其他地方的问题。
Notice的使用方式。iView 的Notice组件默认是单例模式,也就是说同一个通知实例只会显示一次,关闭后不会重新渲染。要解决这个问题,可以优化成每次点击按钮时都创建一个新的通知实例,而不是复用之前的实例。具体实现上,把
Notice.info的调用放在一个函数里,每次点击按钮时调用这个函数即可。代码可以写成这样:
这里的关键点是每次点击按钮都会调用
showNotice函数,从而生成一个新的通知实例。这样即使之前的通知被关闭了,新的通知依然能够正常弹出。如果你觉得每次都写函数有点麻烦,还可以封装一个更通用的方法,比如传入标题和内容作为参数,进一步提升代码的复用性。像这样:
这样做不仅解决了问题,还让代码更加优雅和灵活。如果以后需要调整通知的样式或者行为,只需要改
createNotice函数就可以了。最后吐槽一句,这种单例模式的设计虽然有它的道理,但确实容易让人踩坑,尤其是文档里没特别强调的时候。希望我的解答能帮你少走点弯路。