十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要讲解了如何解决vue自定义指令导致的内存泄漏问题,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
专注于为中小企业提供成都网站建设、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业浦城免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了成百上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。vue的自定义指令是一个比较容易引起内存泄漏的地方,原因就在于指令通常给元素绑定了事件,但是如果忘记了解绑,就会产生内存泄漏的问题。
看下面代码:
directives: { scroll: { inserted (el, cb) { // 不是元素节点 || 未设置回调函数 if (el.nodeType !== 1 || !cb) return let direct = 'down' let rollHeight = 0 let getScrollEventTarget = (target) => { while (target.nodeType === 1 && target.tagName !== 'BODY' && el.tagName !== 'HTML') { var overflowY = getComputedStyle(target).overflowY if (overflowY === 'scroll' || overflowY === 'auto') { return target } target = target.parentNode } return window } let targetNode = getScrollEventTarget(el) let scrollListener = () => { if (targetNode.scrollTop > rollHeight) { direct = 'down' } else { direct = 'up' } rollHeight = targetNode.scrollTop cb.value(rollHeight, direct) } el.unbindEventListener = () => { targetNode.removeEventListener('scroll', scrollListener) } targetNode.addEventListener('scroll', scrollListener) }, // unbind (el) { // if (el.unbindEventListener) { // el.unbindEventListener() // } // } } }