经典场景:我想显示一个列表,但是当它为空时我想显示"无数据".
事实上,做一些我希望简单的事情有点复杂,这让我觉得我可能做错了.
这是我目前的解决方案.
<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>Run Code Online (Sandbox Code Playgroud)
有没有比这更好的解决方案?
Sau*_*abh 18
您可以使用inventoryin的长度v-if,如下所示:
<div id="element">
<div v-if="inventory.length">No item in inventory</div>
<div v-for="(index, item) in inventory">
{{item.key}}<button onclick="remove('{{index}}')">remove</button>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
鉴于该inventory变量是一个哈希而不是一个数组,您可以使用以下任何一个来查找它是空的并使用它v-if:
Object.keys(inventory).length === 0
Run Code Online (Sandbox Code Playgroud)
ECMA 5之前:
function isEmpty(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
return false;
}
return JSON.stringify(obj) === JSON.stringify({});
}
Run Code Online (Sandbox Code Playgroud)
由于您已经在使用jquery,您还可以:
jQuery.isEmptyObject({}); // true
Run Code Online (Sandbox Code Playgroud)
<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="isEmpty">No item in inventory</div>
<div v-for="(index, item) in inventory">
{{item.key}}<button @click="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
},
methods: {
remove: function(index) {
Vue.delete(this.inventory, index);
}
},
computed: {
isEmpty: function () {
return jQuery.isEmptyObject(this.inventory)
}
}
});
});
</script>Run Code Online (Sandbox Code Playgroud)
小智 6
搜索了几分钟后,我想出了一个更好的解决方案来检查对象是否为空。
Object.keys( YOUR_OBJECT ).length == 0 // Check if it's empty.
Run Code Online (Sandbox Code Playgroud)
如果为空,它将返回0。如果您想检查数组是否为空,您绝对可以使用下面的解决方案,
YOUR_ARRAY.length == 0 // Check if it's empty.
Run Code Online (Sandbox Code Playgroud)
就我而言,它是一个object,而不是array。因此,它也可能有所帮助。快乐编码:)
| 归档时间: |
|
| 查看次数: |
29758 次 |
| 最近记录: |