我for ... in在vue js中有一个嵌套循环.我想要的是跳过元素,如果元素的值是null.这是html代码:
<ul>
<li v-for="item in items" track-by="id">
<ol>
<li v-for="child in item.children" track-by="id"></li>
</ol>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
null元素可以存在于对象item和item.children对象中.
例如:
var data = {
1: {
id: 1,
title: "This should be rendered",
children: {
100: {
id: 100,
subtitle: "I am a child"
},
101: null
}
},
2: null,
3: {
id: 3,
title: "Should should be rendered as well",
children: {}
}
};
Run Code Online (Sandbox Code Playgroud)
由于此数据data[1].children[101]不应呈现,如果data[1].children[100]以后变为null,则应从列表中省略.
PS我知道这可能不是表示数据的最佳方式,但我不负责任:)
Lin*_*org 15
编辑:实际上,一个简单的v-if可能有效:
<li v-for="item in items" v-if="item !== null" track-by="id">
Run Code Online (Sandbox Code Playgroud)
试试看.如果没有,请执行此操作:
您可以为其添加过滤器(在App实例之前的main.js中):
Vue.filter('removeNullProps',function(object) {
// sorry for using lodash and ES2015 arrow functions :-P
return _.reject(object, (value) => value === null)
})
Run Code Online (Sandbox Code Playgroud)
然后在模板中:
<li v-for="item in items | removeNullProps" track-by="id">
<ol>
<li v-for="child in item.children | removeNullProps" track-by="id"></li>
</ol>
</li>
Run Code Online (Sandbox Code Playgroud)
在Vue 2中,过滤器已在v-fors中弃用。
现在,您应该使用计算属性。下面的演示。
new Vue({
el: '#app',
data: {
items: [
'item 1',
'item 2',
null,
'item 4',
null,
'item 6'
]
},
computed: {
nonNullItems: function() {
return this.items.filter(function(item) {
return item !== null;
});
}
}
})Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/vue@2"></script>
<div id="app">
Using a computed property:
<ul>
<li v-for="item in nonNullItems">
{{ item }}
</li>
</ul>
<hr>
Using v-if:
<ul>
<li v-for="item in items" v-if="item !== null">
{{ item }}
</li>
</ul>
</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49941 次 |
| 最近记录: |