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

我在這裡遇到了一個問題,我覺得我並沒有真正理解。我包含了一個子元件,它傳遞了一個名為「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>
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板