2016-07-27 86 views

回答

7

不幸的是v-ifv-for没有在一起工作。你可以移动v-if一个水平,这样的:

<tbody v-if="my_tasks.length"> 
    <tr id="retriever-task-{{ index }}" v-for="(index, task) in my_tasks" > 
     <td>{{ task.id }}</td> 
     <td>{{ task.type }}</td> 
     <td>{{ task.frequency }}</td> 
     <td>{{ task.status }}</td> 
     <td><i v-on:click="deleteTask(index, task.id)" class="fa fa-trash"></i></td> 
    </tr> 
</tbody> 
<tbody v-else> 
    <tr> 
     <td colspan="6">No tasks found.</td> 
    </tr> 
</tbody> 

您还可以使用pseudoelement template

<template v-if="my_tasks.length"> 
    <tr id="retriever-task-{{ index }}" v-for="(index, task) in my_tasks" > 
     <td>{{ task.id }}</td> 
     <td>{{ task.type }}</td> 
     <td>{{ task.frequency }}</td> 
     <td>{{ task.status }}</td> 
     <td><i v-on:click="deleteTask(index, task.id)" class="fa fa-trash"></i></td> 
    </tr> 
</template> 
<template v-else> 
    <tr> 
     <td colspan="6">No tasks found.</td> 
    </tr> 
</template> 
1

从Vuejs文档“的V-其他元素必须紧跟在V-if或v-show元素 - 否则不会被识别。“ - https://vuejs.org/guide/conditional.html。它看起来像v-if之后的附加vue数据绑定属性正在打破它(例如v-for和v-on)。

您可以改用v-show。例如:

<tr v-show="!my_tasks.length"> 
     <td colspan="6">No tasks found.</td> 
    </tr> 
+0

不,这与它无关。 “必须立即跟随”的表达是指同一级别的HTML元素。 Wahtever嵌入其中,在这种情况下无关紧要。正如yariiash在上面解释的那样,只有同一层上的'v-if'是问题所在。其他指令('v-on'等)将会很好。 –

+0

谢谢。但是,使用v-show可以很好地与OP的示例结合使用。 – morecchia808

0

yariash是正确的关于v-if和v-for。你可以按照他的建议去做,或者只是把v-else改成v-if的倒数,即v-if =“!my_tasks.length”。