【问题标题】:Vue onclick filterVue onclick 过滤器
【发布时间】:2021-08-16 09:25:46
【问题描述】:

尊敬的 Stack Overflow 用户,

fiddle 下是一段代码,尝试在 Vue JS 中构建一个 onclick 过滤器。但是,该方法还没有起作用。

JS在118-120行,代码取自fiddle

代码仅在 jsfiddle 中,因为发布代码是由于无法使用 Stack Overflow 功能。 提前感谢您提供的任何帮助,使 onclick 过滤器在 jsfiddle 中工作。

期望的结果是一个只显示带有商家的产品的点击函数,这是按钮的名称。

此致

艾司科尼尔森

【问题讨论】:

  • 您看过本指南吗? stackoverflow.com/help/minimal-reproducible-example 如果代码在这里可见。那么就代码提供帮助和交流可能会更容易。
  • 小提琴对我不起作用。我看到了这个<a class='gotoLine' href='#423:26'>423:26</a> Uncaught TypeError: Cannot read property 'getElementsByClassName' of null" 我看到了 Vue、jQuery 和 VanillaJS dom 操作之间的代码混合。我建议仅将所有内容重构为 Vue。

标签: java vue.js button filter


【解决方案1】:

您的代码中存在几个问题,导致您无法获得想要的结果:

  • 您将 Vue 方法与常规窗口方法混合使用。 filterSelection 方法被定义两次 - 首先作为 Vue methods 定义的一部分,然后再次定义。您会注意到只有第二个被调用。

  • 您使用常规的 js 函数来修改 DOM。这与 VueJS 的做法完全相反。您可以使用the proper way Vue does that:class="{ show: propertyFromVue }",而不是使用自定义方法添加或删除类。这将根据 propertyFromVue 布尔值打开和关闭 show 类。

  • 浇头列表只定义一次并显示。您需要一个 second 变量,它只包含“过滤”的项目。这可以通过计算属性来完成:

      computed: {
        filteredToppings: () => this.toopings
          .filter((topping) => !!topping.vendors
            .find((vendor) => vendor.merchang === this.filterSelectionText)
          );
      }
    

    在调用您的 VueJS filterSelection 方法并更新 filterSelectionText 属性时才有效。

    然后你可以使用这个filteredToppings 来显示过滤项目列表:) 祝你好运!

【讨论】:

  • 这是一个工作示例:jsfiddle.net/gq0bLm2r/1 您使用的是onclick,这不是 Vue 的方式。你应该使用@click。首先阅读 Vue 文档。底部还有一些代码做了一些非常奇怪的事情。我已经评论了它,因为它引发了错误。祝你好运!
猜你喜欢
  • 2016-10-31
  • 2017-12-23
  • 2020-06-08
  • 2020-11-06
  • 2019-07-28
  • 2021-10-16
  • 1970-01-01
  • 2018-08-24
  • 2018-07-02
相关资源
最近更新 更多