【发布时间】:2017-08-10 00:03:29
【问题描述】:
在 VueJS 中,我们可以使用 v-if 添加或删除 DOM 元素:
<button v-if="isRequired">Important Button</button>
但是有没有办法添加/删除 dom 元素的属性,例如以下有条件地设置所需的属性:
Username: <input type="text" name="username" required>
类似于:
Username: <input type="text" name="username" v-if="name.required" required>
有什么想法吗?
【问题讨论】:
-
虽然不是那么明显(因此造成混淆),但文档实际上确实说如果属性值评估为 false 则属性被省略 (vuejs.org/v2/guide/syntax.html#Attributes)
-
实际上,文档说如果“…的值为
null、undefined或false”,则不会添加该属性,即不同于评估为假的 JS 脚本。这意味着空字符串在 JavaScript 中是虚假的,但仍会将属性添加到 DOM。为防止这种情况,您可以尝试v-bind:name="name || false" -
@AlexanderB 如果这是真的,我如何通过道具将明确的
false传递给子组件? -
@BruceSun ,如果上下文中的属性“无意”在您给它错误值时消失 - 尝试将其作为字符串传递
'false'。在其他情况下,当您需要控制元素上非布尔 html 属性的存在时,您可以使用v-if的条件渲染,如下所示:github.com/vuejs/vue/issues/7552#issuecomment-361395234 -
@AlexanderB 我想我必须纠正自己——我应该说
attribute,而不是prop。我们可以通过组件属性而不是属性(不被识别为属性)安全地传递显式false。我说的对吗?
标签: javascript vue.js vuejs2