经典场景:我想显示一个列表,但是当它为空时我想显示“无数据”。
做一些我认为简单的事情有点复杂,这一事实让我觉得我可能做错了。
这是我目前的解决方案。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://cdn.jsdelivr.net/vue/1.0.16/vue.js"></script>
<div id="element">
<div v-if="empty">No item in inventory</div>
<div v-for="(index, item) in inventory">
{{item.key}}<button onclick="remove('{{index}}')">remove</button>
</div>
</div>
<script type="text/javascript">
"use strict";
var vm;
$(function() {
vm = new Vue({
el: '#element',
data: {
inventory: {"id1" : {"key" : "val1"}, "id2" : {"key" : "val2"}},
empty: false
},
watch: {
inventory: function() {
vm.empty = $.isEmptyObject(vm.inventory);
}
}
});
});
function remove(key) {
Vue.delete(vm.inventory, key);
}
</script>
还有比这更好的解决方案吗?
原文由 Finch_Powers 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以在
inventory
中使用v-if
的长度,如下所示:鉴于
inventory
变量是一个散列而不是一个数组,您可以使用以下任何方法来查找它为空并在v-if
中使用它:ECMA 5+ :
前 ECMA 5:
由于您已经在使用 jquery ,您还可以执行以下操作: