【问题标题】:Can't filter deep array object in computed with Vue in a table无法过滤表中使用 Vue 计算的深层数组对象
【发布时间】:2020-07-10 17:44:48
【问题描述】:

我一直在尝试很多方法来过滤数据,比如只使用方法或观察者,但我无法实现我想要的。基本上,当我在输入中搜索某些内容时,我只希望表格显示该项目及其到达它的方式。现在我正在尝试计算,我总是得到一个错误,说“未定义的过滤器”之类的东西。这是我计算出来的:

computed: {
filterData() {
  return this.testData.filter(
    data =>
      !this.search ||
      data.building.toLowerCase().includes(this.search.toLowerCase()) ||
      data.children.some(item =>
        item.floor.toLowerCase().includes(this.search.toLowerCase())
      )
  );
}}

这是我要过滤的数据:

data: () => ({
search: "",
testData: [
  {
    id: 1,
    building: "foo 1",
    children: [
      { id: 11, floor: "bar 1" },
      { id: 12, floor: "bar 2" },
      {
        id: 13,
        floor: "bar 3",
        children: [
          {
            id: 131,
            door: "cor 1"
          }
        ]
      }
    ]
  },
  {
    id: 2,
    building: "foo 2",
    children: [
      { id: 21, floor: "bar 3" },
      { id: 22, floor: "bar 4" },
      {
        id: 23,
        floor: "bar 5",
        children: [
          {
            id: 231,
            door: "cor 2"
          },
          {
            id: 232,
            door: "cor 3"
          }
        ]
      }
    ]
  }
]

我创建了一个沙盒以便更容易解释 => https://codesandbox.io/s/modest-paper-vwes5

提前谢谢你!

【问题讨论】:

标签: javascript vue.js filter computed-properties


【解决方案1】:

编辑:我错了,过滤有效,但你的数据非常相似,所以输入例如。 “酒吧”似乎什么也不做。您需要输入“foo 2”或“4”或“5”才能看到效果。

【讨论】:

  • !this.search 仅在没有搜索时为真,任何文本为假
  • 嗯,你是对的。仍然由于某种原因,当我在提供的代码和框中更改它时,它仍然像这样工作。
  • 也许计算属性可以检测到一些限制 - 在这种情况下,它可能嵌套得太深?这是我的猜测,我记得在复杂的计算属性中遇到过这样的问题。不幸的是,文档对于解释要触发的计算属性的条件不是很有帮助。
  • 代码已按原样运行,您的编辑与现有代码执行相同的操作。目前还不清楚他想要改变什么。
  • 是的,你是对的。我的猜测是类似的数据太多了。如果您不输入一个非常独特的字符(如“5”),过滤器似乎什么也不做。它确实让我感到困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多