vue.js - 带有选择选项的 V-IF 和 V-for 循环条件似乎永远不会进入 v-else 语句
问题描述
所以我想知道为什么这个 v-if 和 v-else 语句不起作用,为什么我要以不同的方式解决它。
代码如下
<select v-else v-model="experiment.workflow" required>
<option selected :value="null">Required: Select a Workflow {{ isChain ? 'Chain' : '' }}</option>
<option
v-if="isWorkflowChain"
v-for="workflow of data.workflows"
:key="workflow.uuid"
:value="workflow"
{{ workflow.head.name }}>
</option>
<option
v-else
v-for="workflow of data.workflowChains"
:key="workflow.uuid"
:value="workflow"
</option>
所以我得到了这段代码,看起来在 v-if 语句中加载数据时很好,并且值显示在下拉菜单中。当我将值设置为
export default {
props: {
isWorkflowChain: {
type: Boolean
value: false
}
}
}
应该发生的是它应该跳过 v-if 元素并进入 v-else (我相信它确实如此)并填充数据,但 v-for 语句不填充数据。乍一看,有人对为什么有任何想法吗?
解决方案
这是一个有效的问题,因为目前不支持 v-for
与 with的混合并不明显。v-else
请注意https://github.com/vuejs/vue/issues/4174处的已关闭功能请求
原因
问题是v-for
优先级较高,因此先处理,再v-if
处理。v-else
这意味着,不仅对每个项目执行 v-if,而且更重要的是,在这个问题的上下文中,它不能访问v-for
.
在此处阅读更多信息:https ://vuejs.org/v2/style-guide/#Avoid-v-if-with-v-for-essential
解决方案
正确的方法是隔离两个块,并将其v-if
放在更高级别的非渲染<template>
组件上。
<option>
<template v-if="isWorkflowChain">
<option v-for/>
</template>
<template v-else>
<option v-for/>
</template>
</option>
更快的方法是使用相反的条件 ( !isWorkflowChain
) 和v-for
这样的。
<select v-else v-model="experiment.workflow" required>
<option selected :value="null">Required: Select a Workflow {{ isChain ? 'Chain' : '' }}</option>
<option
v-if="isWorkflowChain"
v-for="workflow of data.workflows"
:key="workflow.uuid"
:value="workflow"
>{{ workflow.head.name }}</option>
<option
v-if="!isWorkflowChain"
v-for="workflow of data.workflowChains"
:key="workflow.uuid"
:value="workflow"
>{{ workflow.head.name }}</option>
</select>
你可以进行isWorkflowChain
计算。如果您有多个语句并且想要捕获 else,它会变得有点棘手,但您可以将该逻辑放入计算中。
推荐阅读
- google-apps-script - 在 Google Script 上使用 Mailapp 进行 OnEdit
- macos - 在 macOS 搜索结果中隐藏重复文件?
- botframework - Composer 中是否还有可用的示例机器人?
- javascript - 语音识别换词
- python - Fastai 不显示字符串数据
- java - 如果实现 Front-Controller 模式,如何使用 MultiPartConfig 注释?
- rust - 如何将 16 字节的内存加载到 Rust __m128i 中?
- python-3.x - Python 值错误:重复的级别名称:“变量”,分配给级别 1,已用于级别 0
- .net-core - 如何通过 MsBuild 将一个 .Net Core 项目的构建输出复制到多个其他目录?
- python - 为什么我的多步 SARIMA 预测会返回如此好的结果?