Vue.js:折叠/展开父级中的所有元素

2024-06-26

我需要为我的 Vue 组件(一些可折叠面板)添加“展开/折叠全部”功能。

如果用户单击折叠按钮,然后单击某个面板并将其展开,然后单击折叠按钮不会做任何事因为观看的参数不会改变。

那么如何正确实现此功能(按钮必须始终折叠和展开组件)?

我准备了简单的示例(抱歉格式错误,它在编辑器中看起来不错:( ):

var collapsible = {
  template: "#collapsible",
  props: ["collapseAll"],
  data: function () {
      return {
        collapsed: true
    }
  },
  watch: {
  	collapseAll: function(value) {
    	this.collapsed = value
    }
  }
}

var app = new Vue({
	template: "#app",
  el: "#foo",
  data: {
      collapseAll: true
  },
  components: {
  	collapsible: collapsible
  }
});
.wrapper {
  width: 100%;
}

.wrapper + .wrapper {
  margin-top: 10px;
}

.header {
  height: 20px;
  width: 100%;
  background: #ccc;
}

.collapsible {
  height: 100px;
  width: 100%;
  background: #aaa;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.3/vue.min.js"></script>

<div id="foo"></div>


<script type="text/x-template" id="collapsible">
 	<div class="wrapper">
    <div class="header" v-on:click="collapsed = !collapsed"></div>
    <div class="collapsible" v-show="!collapsed"></div>
	</div>
</script>


<script type="text/x-template" id="app">
	<div>
    <button v-on:click="collapseAll = true">Collapse All</button>
    <button v-on:click="collapseAll = false">Expand All</button>
 		<collapsible v-for="a in 10" v-bind:collapseAll="collapseAll" v-bind:key="a"></collapsible>
  </div>
</script>

Thanks!


在这种情况下我可能会使用ref.

<button v-on:click="collapseAll">Collapse All</button>
<button v-on:click="expandAll">Expand All</button>
<collapsible ref="collapsible" v-for="a in 10" v-bind:key="a"></collapsible>

并向您的 Vue 添加方法。

var app = new Vue({
    template: "#app",
  el: "#foo",
  methods:{
    collapseAll(){
      this.$refs.collapsible.map(c => c.collapsed = true)
    },
    expandAll(){
      this.$refs.collapsible.map(c => c.collapsed = false)
    }
  },
  components: {
    collapsible: collapsible
  }
});

Example https://codepen.io/Kradek/pen/MmzzvY?editors=1010.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue.js:折叠/展开父级中的所有元素 的相关文章

  • 使用 IE 11 和 AngularJS 的 2 路数据绑定问题

    我最近在使用 AngularJS 的 Web 应用程序上构建了一个功能 但在 IE 11 上遇到了一些问题 apply 将数据更改写入 DOM 由于某种原因 这种情况仅有时发生 而当我尝试调试问题时却从未发生 这使得它看起来像是一个计时问题
  • 如何在 Jasmine JS 中重用 beforeEach/afterEach?

    当使用 JasmineJS 编写测试时 我有许多具有类似 beforeEach afterEach 代码的测试 有没有办法使用 JasmineJS 测试套件实现继承模型 我可以将所有测试分组为一个describe但在这种情况下 我将以包含所
  • 客户端 GitHub 身份验证

    我正在使用 Javascript 对 GitHub 进行基本身份验证 例如 以下 shell 命令从 Github 获取令牌 curl i u uaername password k d scopes repo https api gith
  • 如何在react中返回点击元素的属性?

    我想知道是否有一种简单的方法来获取单击元素的属性React js function App return
  • 获取访客的 Optimizely A/B 测试和变化

    当我在网站上运行实验时 我希望能够找出当前访问者看到的测试和变体 我无法找到如何做到这一点优化Javascript API https www optimizely com docs api 您可以获得第一个正在运行的实验的 ID 假设您有
  • $(document).ready 回调何时执行?

    假设我们附加一个 click http api jquery com click 锚点的处理程序 a 中的标签 document ready http api jquery com ready 打回来 该处理程序将取消默认操作 遵循href
  • 使用 mongoDB 插入子文档

    我收集了以下文件 id 2 workspace name 1 widgets name 2 widgets name 3 widgets name 4 widgets 我怎样才能插入 id 1 blabla blabla 在 小部件 中的
  • 将值传递给映射函数 - CouchDB

    我想知道是否可以将值传递给 couchDB 设计文档中的映射函数 例如 在下面的代码中 可以传递用户输入的值并使用该值来运行地图函数 也许我可以传递用户UserName当他们登录时 然后根据地图功能显示视图 function doc if
  • 如何在 Chrome 中将 Set 转换为数组?

    如何将集合转换为数组 https stackoverflow com questions 20069828 how to convert set to array给出了将 Set 转换为 Array 的三个答案 目前在 Chrome 浏览器
  • `forEach` 函数中的 `return` 关键字是什么意思? [复制]

    这个问题在这里已经有答案了 button click function 1 2 3 4 5 forEach function n if n 3 it should break out here and doesn t alert anyth
  • 为什么 jQuery 对损坏标记的解释与浏览器不同?

    我之前已经回答过这个问题 https stackoverflow com a 19101905 1253312 但我并不完全理解why答案是正确的 答案的要点 p p function jqrender html a href http w
  • 设置三个输入数字的最大值

    我有三个输入数字
  • vue基于媒体查询绑定值

    carousel 3d display 3 width 150 height 150 我想根据媒体查询设置属性绑定 e g 当屏幕宽度 gt 960px 时 显示应变为 5 您可以尝试绑定display组件属性的值
  • 脚本不会从nodejs应用程序中的ejs文件运行

    我正在尝试使用nodejs express mysql和ejs让网页显示图表 但我显然不明白ejs javascript等是如何工作的 我需要运行一个脚本来设置图表 来自 Chart js 模块 但它不会输出任何类型的图表 我尝试过的 将
  • 抓取 Shopee API v4

    我有一个最终项目 其中我想要检索的数据是通过在shopee上抓取数据来获取的 但是当我在隐藏的API上抓取shopee时遇到问题 当我在Insomnia脚本上尝试时 脚本会运行 但是当我尝试时在本地或 google colab 脚本上 这是
  • 汇总异常以保留模块

    我使用一个名为的汇总插件rollup plugin lit css转变 css文件转换成 javascript 模块 该插件非常简单 它本质上只是附加export default到文件 我的汇总配置使用preserveModules and
  • 为什么我的数据没有存储到我的 Firebase 实时数据库中?

    我正在尝试为网络应用程序制作一个注册页面 这会将数据发送到 firebase 数据库 我已阅读官方 firebase 文档并按照说明写入数据 但什么也不会写 在我的数据库控制台中 它显示的所有内容都是空 而不是我的数据 我没有收到控制台错误
  • 多个引导模式的滚动问题

    我有一个带有大量信息的模态页面 因此您需要滚动 该模式包含指向第二个模式的链接 When I 打开模态 1 单击链接打开模式 2 模式 1 保持在后台 然后关闭模式 2 以便我回到模式 1 modal 1 失去滚动 仍然有一个滚动条 但它不
  • 即使切换它时,hasClass 也始终返回 false

    我有以下代码
  • 如何拦截javascript中innerHTML的变化?

    我需要拦截网页内单元格内容的任何更改 以下代码显示 addEventListener 不起作用 function modifyText alert var el document getElementById mycell el inner

随机推荐