子组件的显示与隐藏

在使用Vue开发前端页面的过程中,经常都会遇到需要在父组件中控制子组件的显示/隐藏,比如弹出窗口。最简单的方法就是:通过父子组件间的数据双向绑定来实现。这种方法虽然简单,但只是针对于父与子组件这种关系来实现的。如果是子组件与子组件之间,可以考虑使用Vuex来完成。

另外我自己也是一个前端小白,为了更方便大家理解,我将代码拆分成了两个步骤:

  • 第一步是实现父对子的显示/隐藏的控制(v-show)
  • 第二步是实现子组件对自己的隐藏(父子组件参数传递)

完整的代码在2.1与2.2中。

第一步 使用v-show

这一步首先实现在父组件通过v-show对子组件的显示/隐藏进行控制。

父组件中有显示/隐藏按钮,点击后显示/隐藏子组件,效果如下:

1.1 父组件

<template>
  <div class="contain">
    <p>这里是父组件页面</p>
    <button @click="showDialog(true)">显示</button>
    <button @click="showDialog(false)">隐藏</button>
    <!-- 这里使用v-show -->
    <subDialog v-show="dialog_visible"></subDialog>
  </div>
</template>
<script>
// 引入子组件
import subDialog from "@/components/Dialog/subDialog";
export default {
  components: { subDialog },
  data() {
    return {
      // 控制子组件显示与隐藏的标识,类型为Boolean
      dialog_visible: false
    }
  },
  methods: {
    showDialog(visible) {
      this.dialog_visible = visible;
    }
  }
}
</script>
<style lang="scss" scoped>
/* 加入css代码仅是为了使界面更加直观 */
.contain {
  height: 300px;
  width: 400px;
  text-align: center;
  padding: 20px;
  background-color: #9dd3fa;
}
</style>

Vue中的v-show指令会通过切换CSS中display属性的值,使对应元素显示/隐藏。

简化了click方法,将显示/隐藏按钮的点击事件写到了一起。

1.2 子组件

目前子组件中仅仅只是做界面的显示。

<template>
  <div class="sub-contain">
    <p>这里是子组件窗口</p>
  </div>
</template>
<script>
export default {
  
};
</script>
<style lang="scss" scoped>
/* 加入css代码仅是为了使界面更加直观 */
.sub-contain {
  height: 150px;
  width: 100%;
  padding: 20px;
  text-align: center;
  margin-top: 20px;
  background-color: #1f6fb5;
  color: #fff;
}
</style>

2 第二步 父子组件传参

在第一步中,我们通过在父组件中修改dialog_visible的值,来控制子组件的显示/隐藏,非常简单。

而下一步,我们还需要实现在子组件中隐藏(关闭)自己。

原理上很简单,其实就是在子组件中,修改父组件中的dialog_visible参数嘛。

最终的效果如下:

2.1 父组件

<template>
  <div class="contain">
    <p>这里是父组件页面</p>
    <button @click="showDialog(true)">显示</button>
    <button @click="showDialog(false)">隐藏</button>
    <!-- 新增了向子组件传递的参数dialog_visible 与 自定义事件dialogVisibleEvent -->
    <subDialog 
	  v-show="dialog_visible" 
      :dialog_visible="dialog_visible"
      @dialogVisibleEvent="showDialog">
   	</subDialog>
  </div>
</template>
<script>
// 引入子组件
import subDialog from "@/components/Dialog/subDialog";
export default {
  components: { subDialog },
  data() {
    return {
      // 控制子组件显示与隐藏的标识,类型为Boolean
      dialog_visible: false
    }
  },
  methods: {
    showDialog(visible) {
      this.dialog_visible = visible;
    }
  }
}
</script>
<style lang="scss" scoped>
/* 加入css代码仅是为了使界面更加直观 */
.contain {
  height: 300px;
  width: 400px;
  text-align: center;
  padding: 20px;
  background-color: #9dd3fa;
}
</style>

父组件的变化并不大,主要有两个地方:

  • 向子组件传参,即将dialog_visible传递给子组件
  • 设置自定义事件与其处理方法

2.2 子组件

<template>
  <div class="sub-contain">
    <p>这里是子组件窗口</p>
    <button @click="doClose">隐藏</button>
  </div>
</template>
<script>
export default {
  props: {
    dialog_visible: Boolean
  },
  data() {
    return {
      visible: this.dialog_visible
    }
  },
  watch: {
    visible(val) {
      this.dialog_visible = val;
    }
  },
  methods: {
    doClose() {
      // 触发父组件中的dialogVisibleEvent事件,并传递参数
      this.$emit('dialogVisibleEvent', false);
    }
  }
};
</script>
<style lang="scss" scoped>
.sub-contain {
  height: 150px;
  width: 100%;
  padding: 20px;
  text-align: center;
  margin-top: 20px;
  background-color: #1f6fb5;
  color: #fff;
}
</style>

子组件中增加了一个按钮,用于隐藏自身,通过触发父组件事件来修改父组件中dialog_visible的值。

用一张图来表示父、子组件间数据双向绑定的数据流向是:

如此便完成了Vue子组件的显示与隐藏。

(最后吐槽一句,CSDN这markdown编辑器的代码块高亮都还不支持vue的语法,勉强用html语法的高亮代替…)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持Devmax。

Vue中子组件的显示与隐藏方式的更多相关文章

  1. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  2. vue自定义加载指令v-loading占位图指令v-showimg

    这篇文章主要为大家介绍了vue自定义加载指令和v-loading占位图指令v-showimg的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  3. vue使用动画实现滚动表格效果

    这篇文章主要为大家详细介绍了vue使用动画实现滚动表格效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  4. 关于Vue 监控数组的问题

    这篇文章主要介绍了Vue 监控数组的示例,主要包括Vue 是如何追踪数据发生变化,Vue 如何更新数组以及为什么有些数组的数据变更不能被 Vue 监测到,对vue监控数组知识是面试比较常见的问题,感兴趣的朋友一起看看吧

  5. Vue子组件props从父组件接收数据并存入data

    这篇文章主要介绍了Vue子组件props从父组件接收数据并存入data的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. Vue h函数的使用详解

    本文主要介绍了Vue h函数的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  7. VUE响应式原理的实现详解

    这篇文章主要为大家详细介绍了VUE响应式原理的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

  8. vue+Element ui实现照片墙效果

    这篇文章主要为大家详细介绍了vue+Element ui实现照片墙效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. vue+elemet实现表格手动合并行列

    这篇文章主要为大家详细介绍了vue+elemet实现表格手动合并行列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. iview+vue实现导入EXCEL预览功能

    这篇文章主要为大家详细介绍了iview+vue实现导入EXCEL预览功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部