<keep-alive> <router-view/> </keep-alive>
页面,在这里已经定义了自定义指令,click-outside,既点击指令绑定元素的外部触发element-ui
<template> <div > outside </div> <div @click="handleClick" v-click-outside="handleClickOutside"> <span v-if="show">page</span> </div> </template> <script> export default { data() { return { show: true, } }, methods: { handleClickOutside(){ this.show = false }, handleClick() { this.show = true } } } </script>
这里就有一个问题了,当元素绑定了click-outside 以后,那么只有等元素注销才会将这个指令注销掉。
但因为keep-alive 的缘由,路由切换并不会注销这个route-view,因此只要你不点击绑定out-side元素时,那么一直会触发这个事件。
对性能影响不大(应该不大),在element-ui中的el-dropdown 也会一直触发这个事件。
在项目中我在out-side中一直console.log了一个字符串,无论页面怎么切换,只要有out-side指令的页面没有注销,那么无论你点击哪里都会触发这个事件。
一直console.log,这个就使人有点不舒服了。为了工做的温馨性,我搜索了这个问题,发现除了注销元素,就没有其余方法了。
无奈,就在keep-alive的生命周期函数中deactivated中经过杀出了这个绑定事件的元素,在activated中插入这个元素ide
<template> <div > outside </div> <div v-if="inThisPage" @click="handleClick" v-click-outside="handleClickOutside"> <span v-if="show">page</span> </div> </template> <script> export default { data() { return { show: true, inThisPage: true } }, methods: { handleClickOutside(){ this.show = false }, handleClick() { this.show = true } }, deactivated() { this.inThisPage = false }, activated() { this.inThisPage = true } } </script>