首页  >  问答  >  正文

Vue中的条件渲染:仅当Firestore字段值与特定字符串值匹配时显示

<p>Firestore数据库字段(在“review”集合中的<code>reviewPrivacy</code>字段)是字符串类型,由Vue表单输入(单选按钮)填充,有三个可能的答案(值)之一是<code>keepFullyPrivate</code>。</p> <p>如果<code>review.reviewPrivacy</code>的值是<code>keepFullyPrivate</code>,我想要显示<code><h2>评论者的身份是私密的</h2></code>。</p> <p>一旦这个工作正常,我将添加<code>v-if-else</code>和<code>v-else</code>选项,为每个选项显示不同的内容。</p> <p>我的代码如下。</p> <p>在VSC中没有标记任何错误,但无论<code>review.reviewPrivacy</code>的值是什么,<code><h2></code>标签中的文本总是显示,无论它是否等于<code>keepFullyPrivate</code>。</p> <pre class="brush:php;toolbar:false;"><div v-if="('review.reviewPrivacy', '==', 'keepFullyPrivate')"><h2>评论者的身份是私密的</h2></div></pre> <p>更新(附加信息):</p> <ul> <li>我使用的是Vue 3.2.1版本</li> <li>从Firestore获取的数据是正确的。例如,在与上面的代码相同的父级中,这行代码<code><p>此评论的隐私选择:{{ review.reviewPrivacy }}</p></code>在DOM中显示以下文本:<em>此评论的隐私选择:postAnonPublic</em>,这是<code>v-else-if</code>条件。</li> </ul> <p>第二次更新:按照评论中的要求,将代码作为完整的块:</p> <pre class="brush:php;toolbar:false;"><div class="review-detailZ"> <div> <!-- BEGIN main (left-hand) column --> <p>此评论的隐私选择:{{ review.reviewPrivacy }}</p> <br /> <!-- 使用Vue 3.2.1版本 --> <div v-if="('review.reviewPrivacy', '==', 'keepFullyPrivate')"><h2>评论者的身份是私密的</h2></div> <div v-else-if="('review.reviewPrivacy', '==', 'postAnonPublic')"><h2>匿名 - 评论者:{{ review.userName }}</h2></div> <div v-else><h2>评论者选择完全公开 - 全名为{{ review.userFirstName }} {{ review.userLastName }}</h2></div> <br /> <p>创建于{{ review.createdAt }}天前</p> <br /> </div></pre> <p>谢谢!</p>
P粉007288593P粉007288593439 天前515

全部回复(2)我来回复

  • P粉864872812

    P粉8648728122023-08-29 15:54:29

    雷雷 雷雷

    回复
    0
  • P粉265724930

    P粉2657249302023-08-29 10:25:42

    ('review.reviewPrivacy', '==', 'keepFullyPrivate')只是一组以逗号分隔的字符串,并且它的值为最后一个字符串:'keepFullyPrivate',所以你的标记变成了v-if="'keepFullyPrivate'",它总是为真。因此,div及其h2总是会被渲染出来。

    正确的比较review.reviewPrivacy'keepFullyPrivate'的表达式是:

    review.reviewPrivacy == 'keepFullyPrivate'
    
    // 或者更好的写法:
    review.reviewPrivacy === 'keepFullyPrivate'
    

    使用三个等号(===)进行严格比较是一个好的实践。

    因此,最终结果应该是:

    <div v-if="review.reviewPrivacy === 'keepFullyPrivate'"><h2>评论者的身份是私密的</h2></div>
    

    回复
    0
  • 取消回复