【问题标题】:How to hide some dynamically generated div's in VueJS v-for如何在 VueJS v-for 中隐藏一些动态生成的 div
【发布时间】:2021-04-22 14:15:29
【问题描述】:

如何在 VueJS 中隐藏动态生成的 div 元素?我有一个聊天机器人应用程序,消息在一个名为messages 的道具中发送,这个消息数组被迭代,它的信息以多个 Div 的形式显示在屏幕上。生成的 Div 之一用于衡量他们是否喜欢响应。理想情况下,一旦用户选择了“是”或“否”,那么特定的响应选项框就会消失,但是到目前为止我尝试过的所有解决方案都会导致所有响应选项框都消失。

我尝试在 div 上添加 !isHidden 属性,然后在单击任一按钮时切换它。但是当我这样做时,每个响应选项框都会消失,也不会出现新的选项框。

我还分配了一个动态 ID,目的是使用它隐藏特定的 div,这就是我使用 Vanilla JavaScript 解决这个问题的方法。但是我一直在努力通过他们的 ID 来定位特定的 Div,因为我在控制台中一直为空。

我正在尝试做的事情可能吗?

我已经包含了 UI 的屏幕截图以及代码(我已经突出显示了我希望在单击每条消息后消失的特定代码段)。

最后一张图片显示了我想要隐藏的确切 div,例如如果我想在点击 messageResponseSatisfactionOption3messageResponseSatisfactionOption6 后隐藏它们。很抱歉遮挡了很多图片,这是针对大学项目的。

UI of application

Code snippet

UI image with element console open

提前致谢:)

【问题讨论】:

  • 能否请您添加一段代码,说明您的迭代方式和内容
  • @GirlCodes 我添加了另一张图片,显示了我想在点击按钮时隐藏的确切 div:'messageResponseSatisfactionOption3' 和 'messageResponseSatisfactionOption6',第一张图片也显示了 'messages' 道具被迭代。这是你要求的吗? :)
  • 完全理解 v-if="message.isStatisfationResponseRequired" 并切换这个特定的布尔值不起作用?
  • @GirlCodes 感谢您的回复,不是 if 语句仅用于决定是否应显示响应选项,因为它仅显示在某些响应中。
  • 这不是你想要做的吗?您希望显示或不显示响应吗?

标签: javascript vue.js


【解决方案1】:

例如,如果消息是

message: {id: 1, name: "name", side: "side", isStatisfationResponseRequired: true,isStatisfationResponseAnswered: false,...}

在你拥有的元素上:

<div :id="'messageResponseSatisfactionOption' + message.id" v-if="isStatisfationResponseRequired(message.isStatisfationResponseRequired,message.id)&&!isStatisfationResponseAnswered">

并在他们响应后的方法中,并且您希望将其删除,例如传递消息在列表中和您执行的方法中的索引:

hideResponse(index) {
    this.messages[index].isStatisfationResponseAnswered= false;
}

【讨论】:

  • 这解决了我的问题!我从未考虑过在消息中切换布尔属性,因为我认为隐藏 div 会是更好的解决方案,但您的解决方案肯定更好。非常感谢:)
  • 不客气,我很高兴能帮上忙,但您也可以使用另一个布尔值,如 showStatisfationResponse 并切换它并添加一个 :class="{'hidden':showStatisfationResponse}" 并且该类没有显示
猜你喜欢
  • 2018-01-27
  • 2020-05-13
  • 2018-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多