国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

詳解vue中點擊空白處隱藏div的實現(用指令實現)

2019-11-19 13:59:53
字體:
來源:轉載
供稿:網友

簡單想應該怎么實現?

1、肯定是給document增加一個click事件監聽
2、當發生click事件的時候判斷是否點擊的當前對象
結合著本思路和指令咱們來實現。

簡單介紹vue指令

一個指令定義對象可以提供如下幾個鉤子函數 (均為可選):

  1. bind:只調用一次,指令第一次綁定到元素時調用。在這里可以進行一次性的初始化設置。
  2. inserted:被綁定元素插入父節點時調用 (僅保證父節點存在,但不一定已被插入文檔中)。
  3. update:所在組件的 VNode 更新時調用,但是可能發生在其子 VNode 更新之前。指令的值可能發生了改變,也可能沒有。但是你可以通過比較更新前后的值來忽略不必要的模板更新 (詳細的鉤子函數參數見下)。
  4. componentUpdated:指令所在組件的 VNode 及其子 VNode 全部更新后調用。
  5. unbind:只調用一次,指令與元素解綁時調用。

接下來我們來看一下鉤子函數的參數 (即 el、binding、vnode 和 oldVnode)。

代碼實現

創建指令對象,分析放在代碼中

<template> <div> <div class="show" v-show="show" v-clickoutside="handleClose">  顯示 </div> </div></template><script>const clickoutside = { // 初始化指令  bind(el, binding, vnode) {    function documentHandler(e) {  // 這里判斷點擊的元素是否是本身,是本身,則返回      if (el.contains(e.target)) {        return false;  }  // 判斷指令中是否綁定了函數      if (binding.expression) {  // 如果綁定了函數 則調用那個函數,此處binding.value就是handleClose方法        binding.value(e);      } } // 給當前元素綁定個私有變量,方便在unbind中可以解除事件監聽    el.__vueClickOutside__ = documentHandler;    document.addEventListener('click', documentHandler);  },  update() {},  unbind(el, binding) { // 解除事件監聽    document.removeEventListener('click', el.__vueClickOutside__);    delete el.__vueClickOutside__;  },};export default {  name: 'HelloWorld',  data() {    return {      show: true,    };  },  directives: {clickoutside},  methods: {    handleClose(e) {      this.show = false;    },  },};</script><!-- Add "scoped" attribute to limit CSS to this component only --><style scoped>.show {  width: 100px;  height: 100px;  background-color: red;}</style>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盘锦市| 高陵县| 堆龙德庆县| 周至县| 怀柔区| 都昌县| 措勤县| 海淀区| 万载县| 利辛县| 阿坝| 额尔古纳市| 涿鹿县| 景谷| 华阴市| 萝北县| 巴林右旗| 民勤县| 栾川县| 宝清县| 南木林县| 远安县| 云龙县| 泌阳县| 宁蒗| 竹山县| 新竹县| 健康| 渭南市| 海林市| 寿宁县| 湟中县| 镇沅| 卓尼县| 合作市| 康马县| 敦煌市| 电白县| 休宁县| 曲沃县| 长宁区|