<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style >
.content{
width: 100px;
height: 100px;
background-color: red;
}
</style>
</head>
<body>
<div id='app'>
<div v-color = "'red'">大家好</div>
<div v-click-outside = "hide">
<input type="text" @focus='show' >
<div class="content" v-show="isShow"></div>
</div>
</div>
<script src="./node_modules/vue/dist/vue.js"></script>
<script>
//全局指令 只需在全局引用即可
Vue.directive('color',function(el,bindings,vnode){ // el:<div>大家好</div> ; bindings 绑定的属性; vnode 虚拟节点,里面有上下文context,Vue,就是我们这里的vm
// console.log(el,bindings,vnode)
el.style.border = `1px solid ${bindings.value}`
})
let vm = new Vue({
el:'#app',
directives:{
"click-outside"(el,bindings,vnode){
//绑定给document 事件捕获
console.log('el',el)
document.addEventListener('click',(e)=>{
if(!el.contains(e.target)){
console.log('失去焦点',bindings.expression)
vnode.context[bindings.expression]()
}
})
}
},
data:{
isShow:false
},
methods:{
show(){
this.isShow = true
},
hide(){
this.isShow = false
}
}
})
</script>
</body>
</html>