javascript - 从 v-for 内部访问多维对象
问题描述
我可能正在做一些密集的事情,但是现在我已经用头撞了一段时间,我想我会在这里问是否有其他人可以看到我哪里出错了。
所以,这有点简化,但基本上我正在使用 vue.js 并有一个 v-for 循环来制作一个很好的列表,但我想使用循环值作为键从另一个多维对象访问数据:
<li v-for="bar in foo.bars">{{ list[bar].name }}</li>
其中列表定义data
如下:
list: {
"somekey":{"name":"Joe Bloggs","email":"joe.bloggs@"},
"someotherkey":{"name":"John Doe","email":"john.doe@"},
"anotherkey":{"name":"A N Other","email":"a.n.other@"}
etc.
},
bars
它本身也是多维的,但具体细节在这里并不重要。重要的是结果bar
值是list
.
这会导致以下控制台警告/错误:
vue.js:597 [Vue 警告]:渲染错误:“TypeError:无法读取未定义的属性‘名称’”TypeError:无法读取未定义的属性‘名称’
但是,如果我使用:
<li v-for="bar in foo.bars">{{ list[bar] }}</li>
我没有收到任何错误,并且输出如下:
- {"name":"Joe Bloggs","email":"joe.bloggs@"}
- {"name":"John Doe","email":"john.doe@"}
- 等等
这是我所期望的。同样,如果我使用:
<li v-for="bar in foo.bars">{{ list['anotherkey'].name }}</li>
我明白了
- {"name":"AN Other","email":"another@"}
这又是我所期望的。所以所有的对象数据都在那里并且可以访问(并且似乎可以通过控制台和 Vue DevTools 插件),只是在 v-for 中使用list[bar].name
(或list[bar][name]
,list[bar].email
等)时不行,这有点挠头。
有任何想法吗?
谢谢!
解决方案
所以,感谢@Sphinx 的建议,这里是所有代码荣耀的答案:http: //jsfiddle.net/megalomaniac/8j7otq0h/
<div id='app' v-cloak>
<div v-for='foo in things'>
<h3>{{ foo.title }}</h3>
<div>
<ul>
<li v-for="bar in foo.bars" v-if="list[bar]">{{ list[bar].name }}</li>
<!-- <li v-for="bar in foo.bars">Doesn't work: {{ list[bar].name }}</li> -->
</ul>
</div>
<div v-html="foo.description"></div>
</div>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
list: {
"somekey":{"name":"Joe Bloggs","email":"joe.bloggs@"},
"someotherkey":{"name":"John Doe","email":"john.doe@"},
"anotherkey":{"name":"A N Other","email":"a.n.other@"}
},
things: [{"title":"Title01","bars":["somekey"],"description":"Desc01"},
{"title":"Title02","bars":["someotherkey","anotherkey"],"description":"Desc02"},
{"title":"Title03","bars":["somekey","brokenkey"],"description":"Desc03"},
{"title":"Title03","bars":["somekey","anotherkey"],"description":"Desc03"}]
}
})
</script>
基本上,我需要考虑某些数据可能错误或丢失的情况(在 JSFiddle 中查找“brokenkey”)。虽然这确实适用于我的情况下的异步问题,但这并不是因为异步,而是因为某些数据实际上丢失了——这是我认为我可以确定没有错的一件事(这会教我思考测试返回的 JSON 的有效性、控制台中对象的存在、信任源等足以进行检查)。
推荐阅读
- python - AttributeError 尝试使用 DataProcSparkOperator 任务加载 DAG
- sql - TSQL查看列是否是唯一索引的一部分而不使用动态管理功能
- panzoom - 使用 panzoom 时如何在 inline-block 容器中初始居中图像?
- java - 在 Firefox 浏览器中打开新标签并尝试向下滚动页面并单击链接失败
- arrays - 将更改后的数组重置为其原始值 Swift
- delphi - 如果新目录已经存在,则从旧目录复制自己到新目录中
- javascript - 将我的字符串的一部分与对象数组匹配
- amazon-web-services - 难以将 S3 jsonl 数据中的大型数据帧加载到胶水中以转换为镶木地板:内存约束和工人产卵失败
- c++ - 我在哪里可以找到 d3dcompiler_43.dll 和相应的 lib 文件?
- javascript - 如何从div中获取变量值