记录一下今天项目中踩的两个坑。
数据是从后台取的,然后通过v-for循环展现出来,由于一些原因,获取到后台返回的值是一个空对象,导致报错。想着直接v-if判断一下对象,如果是空就不编译就不会导致循环空对象报错。然后就有了下面的代码。
<div class="" >
<p class="a">xxxx</p>
<p class="value" v-if="item.info" v-for="arr in item.info.list" :key="arr.date">
{{arr.money}} {{dateMonth(arr.date)}}</p>
</div>
接下来问题来了,发现加了v-if没有用,继续报错,就在纳闷为什么v-if没有限制住,难倒v-if和v-for不能一起用??
原因是v-for优先级比v-if高。
官网中说到:
不推荐同时使用 v-if 和 v-for。
当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级。
好吧,然后就想着拿多一个标签包住来进行判断
<div class="" >
<p class="a">xxxx</p>
<p v-if="item.info">
<p class="value" v-for="arr in item.info.list" :key="arr.date">
{{arr.money}} {{dateMonth(arr.date)}}</p>
</p>
</div>
发现还是没有解决问题,打开控制台f12审查元素发现变成了三个并排的p标签,???p标签会自己跑出来
原来,p标签虽然是一个块标签,但是不可以存放别的块标签,p标签中放p标签是放不进去的,存放的块标签是在p标签外部的
好吧,改用了div标签来包裹
下面代码,终于解决了问题:
<div class="" >
<p class="a">xxxx</p>
<div v-if="item.info">
<p class="value" v-for="arr in item.info.list" :key="arr.date">
{{arr.money}} {{dateMonth(arr.date)}}</p>
</div>
</div>