【问题标题】:vue cannot acces object propsvue 无法访问对象道具
【发布时间】:2020-01-22 12:32:09
【问题描述】:

我在数组中执行 find 方法来搜索对象。我取回了对象,但我无法访问该对象中的道具。 nuxt 错误抛出者说如下:

无法读取未定义的属性“值”

我的代码:

<v-data-table :headers="datatable.headers" :items="datatable.items" class="elevation-1">
    <template v-slot:body="{ items }">
        <tr v-show="inMenu.find(menuItem => menuItem.name == item.name.toLowerCase()).value == true" v-for="(item, index) in items" :key="index">
            <td>{{item.name}}</td>
            <!-- problem is in the <v-text-field> v-model -->
            <td><v-text-field v-model="settings.adminIcons.find(menuItem => menuItem.key == item.name.toLowerCase()).value" label="icon"></v-text-field></td>
        </tr>
    </template>
</v-data-table>

奇怪的是,如果我这样做:

<!-- works -->
<v-text-field v-model="settings.adminIcons.find(menuItem => menuItem.key == 'evenementen').value" label="icon">

而不是这个:

<!-- does not work -->
<!-- item.name.toLowerCase() == 'evenementen' -->
<v-text-field v-model="settings.adminIcons.find(menuItem => menuItem.key == item.name.toLowerCase()).value" label="icon">

它不会工作。但item.name.toLowerCase() 与 'evenementen' 相同。

有什么办法吗?

【问题讨论】:

  • 你能创建一个codepen或沙箱示例吗?

标签: vue.js vuetify.js nuxt.js


【解决方案1】:

它给出了错误,因为在 find 中它没有找到任何单个项目它的返回记录,并且您正在尝试访问 .value

// Error


//console.log(settings['adminIcons'].find(menuItem => menuItem.key == "env1").value)

<script>
const array1 = [5, 12, 8, 130, 44];

const settings = {
	'adminIcons':[
      {"key":"env",
        "value":"value1"}
     ]
}
const found = array1.find(element => element > 10);

console.log(settings['adminIcons'].find(menuItem => menuItem.key == "env").value);


// Error


//console.log(settings['adminIcons'].find(menuItem => menuItem.key == "env1").value);
</script>

【讨论】:

  • find 正在返回一个对象
  • 你还没明白我在说什么,当 find 不会返回任何对象时它会报错。
  • 是的,您可以通过此错误得出结论,它不是对象。但我找不到解决方案如何做到这一点。这就是为什么我在stackoverflow上有这个问题。我可以诊断它不是一个对象。
  • 你可以设置v-if条件来检查值是否存在。
【解决方案2】:

基本上,您访问的是 item 的值,其中 item 在您的数据模型中不可用。

这段代码会给你一个字符串,这就是你的错误来自哪里

menuItem.key == item.name.toLowerCase()) // if item.name = 'Test' will become 'test'.

现在,它返回的不是您最初在循环中访问的项目,而是给您一个结果,而是在新数据中。这就是为什么当您访问它的值时,它说无法读取未定义的属性值。

【讨论】:

  • 我需要在数组中找到一个项目。您将如何使用此代码实现这一目标?
  • 这不是我给你的代码,而是错误的来源
猜你喜欢
  • 2019-07-27
  • 2021-05-04
  • 2022-06-23
  • 2022-06-12
  • 2020-08-26
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
相关资源
最近更新 更多