vue组件中点击页面的其它地方将自定的组件进行隐藏

需求:编写一个自定义的组件需要完成点击页面的其他非组件的地方的时候要把这个组件隐藏起来。

代码:

beforeMount() {//在DOM元素渲染之前开始监听mousedown事件
    this._close = (e) => {
      // 如果点击发生在当前组件内部,则不处理
      if (this.$refs.closeSelect.contains(e.target)) {
        return;
      }
      this.isShowSelectList = false;
    };
    document.body.addEventListener("mousedown", this._close);
  },
  beforeDestroy() {//在vue文件销毁的时候移除这个事件
    document.body.removeEventListener("mousedown", this._close);
  },
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过在父组件维护一个状态来实现。具体步骤如下: 1. 在父组件定义一个变量 `activeComponent` ,用于表示当前激活的组件。 2. 在父组件定义一个方法 `setActiveComponent` ,用于改变 `activeComponent` 的值。 3. 在父组件的模板使用 `v-if` 条件渲染,根据 `activeComponent` 的值来控制组件的显示和隐藏。 4. 在子组件添加一个 `click` 事件,当点击组件时,调用父组件的 `setActiveComponent` 方法,将 `activeComponent` 的值设置为当前组件的名称。 下面是一个示例代码: Parent.vue: ``` <template> <div> <button @click="setActiveComponent('ComponentA')">ComponentA</button> <button @click="setActiveComponent('ComponentB')">ComponentB</button> <button @click="setActiveComponent('ComponentC')">ComponentC</button> <button @click="setActiveComponent('ComponentD')">ComponentD</button> <component-a v-if="activeComponent === 'ComponentA'" /> <component-b v-if="activeComponent === 'ComponentB'" /> <component-c v-if="activeComponent === 'ComponentC'" /> <component-d v-if="activeComponent === 'ComponentD'" /> </div> </template> <script> import ComponentA from './ComponentA.vue' import ComponentB from './ComponentB.vue' import ComponentC from './ComponentC.vue' import ComponentD from './ComponentD.vue' export default { components: { ComponentA, ComponentB, ComponentC, ComponentD, }, data() { return { activeComponent: 'ComponentA', // 默认显示 ComponentA } }, methods: { setActiveComponent(componentName) { this.activeComponent = componentName }, }, } </script> ``` ComponentA.vue: ``` <template> <div @click="selectComponent">ComponentA</div> </template> <script> export default { methods: { selectComponent() { this.$emit('component-selected', 'ComponentA') }, }, } </script> ``` ComponentB.vue: ``` <template> <div @click="selectComponent">ComponentB</div> </template> <script> export default { methods: { selectComponent() { this.$emit('component-selected', 'ComponentB') }, }, } </script> ``` ComponentC.vue: ``` <template> <div @click="selectComponent">ComponentC</div> </template> <script> export default { methods: { selectComponent() { this.$emit('component-selected', 'ComponentC') }, }, } </script> ``` ComponentD.vue: ``` <template> <div @click="selectComponent">ComponentD</div> </template> <script> export default { methods: { selectComponent() { this.$emit('component-selected', 'ComponentD') }, }, } </script> ``` 在子组件,我们添加了一个 `click` 事件,并且在该事件通过 `$emit` 方法向父组件发送了一个 `component-selected` 事件,同时传递了当前组件的名称。父组件在监听到 `component-selected` 事件后,就会调用 `setActiveComponent` 方法,将 `activeComponent` 的值设置为当前组件的名称,从而控制组件的显示和隐藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值