Vue 3 Composition API:即使值为 False 也渲染 Props 和 v-if
P粉786432579
P粉786432579 2023-11-05 14:48:16
0
2
785

我在这里遇到了一个问题,我觉得我并没有真正理解。我包含了一个子组件,它传递了一个名为“active”的prop,可以设置为true或false。想法是如果传递的是“true”,那么组件的一部分会显示出来,如果传递的是“false”,则不显示。

根据我的理解,我应该能够只使用prop名称,像这样做:

<template>
   <div v-if="active">这是active的值:{{active}}</div>
</template>

问题在于,如果我直接将上述语句中的v-if设置为true或false,那么它会按预期工作。如果我将其作为prop传递进来,无论是true还是false,它总是显示。

有效(不显示任何内容):

<template>
   <div v-if="false">这是active的值:{{active}}</div>
</template>

无效(无论active的值是什么,div中的内容都会显示):

//-File1---------------------------------------

<template>
   <myComponent active=false />
</template>

//-File2---------------------------------------

<template>
   <div v-if="active">这是active的值:{{active}}</div>
</template>

<script>
    export default{
        props:['active']
    }
</script>

为什么会这样?我通过显示“active”的值进行了确认,它传递的值是false,但是它仍然会渲染,尽管值为false。我在这里漏掉了什么吗?我尝试过使用引号、不使用引号,使用ref将其传递给本地值并使用它:

import { ref } from 'vue';

export default{
    props:['active']
    setup(props,ctx){
        const active = ref(props.active);
        return {
            active
        }
    }
}

这也没有起作用。

P粉786432579
P粉786432579

全部回复(2)
P粉976488015

在你的导出默认值上,

props: {
    active: {
      type: Boolean,
      default: false
    }
}

在你的组件模板上,

<template>
   <div v-if="active !== false"> 仅在 active 为真时显示 {{ active }}</div>
</template>

在使用组件时,将 active 元素绑定为 false

<myComponent :active="false" />
P粉327903045

这是因为你的prop是从父组件传递过来的字符串(与其他HTML属性的默认行为相同)。为了将prop作为布尔值传递,你需要使用v-bind语法或:简写,这样false将被解析为一个JavaScript表达式而不是字符串:

<template>
   <myComponent v-bind:active="false" />
</template>

或者

<template>
   <myComponent :active="false" />
</template>
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板