javascript - 为什么 Vue 将未指定的 bool props 视为 false?

标签 javascript vue.js

请参阅此示例

如果我有一个这样的组件:

<template>
  <div v-if="on">
    Hello
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  props: {
    on: Boolean
  },
  mounted() {
    console.log(this.on)
  }
};
</script>

然后我渲染该组件并在 Prop 上指定任何内容

<template>
  <div >
    <HelloWorld/>
  </div>
</template>

这将输出 false 而不是 undefined

这是为什么?

无论如何,我是否可以检测人们是否没有指定该 Prop ,以便我可以使用 lodash _.isBoolean 来检测它?

目前,我知道的唯一方法是手动将默认值设置为未定义

最佳答案

您可以为其设置默认值,并检查该值是否仍然相同,然后用户没有传递 Prop ,但在某些情况下您无法真正将您的值与其默认值进行比较,例如prop 是一个函数。

您可以在组件中包含 this.$options.propsData 。如果此处存在该 prop,则表明用户已明确设置它;默认值未显示在。

关于javascript - 为什么 Vue 将未指定的 bool props 视为 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59909945/

相关文章:

javascript - JavaScript 中的立即调用函数

javascript - 防止在输入字段中运行JS代码,然后由JS添加

npm - 在没有 npm 的情况下设置 vue js

java - 我怎样才能找到两个或多个多边形之间的最小距离?

javascript - 在 IE8 中解析 JSON 的奇怪行为

javascript - 从 JSON 对象中选择项目并作为 JSON 对象返回,如 C# LINQ

json - 在 Vue 中为 JSON 数据创建下拉过滤器

javascript - 未捕获( promise 中) 传递的组件 - 未定义无效。肯杜伊

vue.js - Vuejs 路由器链接到子组件

javascript - 使用我在 laravel 中从 ajax 过滤的数据将 "append"VUE 组件转换为 DOM 的正确方法是什么?