suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Bedingtes Rendering in Vue: Wird nur angezeigt, wenn der Firestore-Feldwert mit einem bestimmten Zeichenfolgenwert übereinstimmt

<p>Firestore-Datenbankfelder (<code>reviewPrivacy</code>-Felder in der Sammlung „review“) sind vom Typ „String“, gefüllt mit Vue-Formulareingaben (Optionsfelder) und mit drei möglichen Antworten (Werten). Eine davon ist <p> ;code>keepFullyPrivate</code>. </p> <p>Wenn der Wert von <code>review.reviewPrivacy</code> <code>keepFullyPrivate</code> ist, möchte ich zeigen, dass <code><h2>die Identität des Rezensenten privat ist</ h2></code>. </p> <p>Sobald dies funktioniert, füge ich die Optionen <code>v-else</code> hinzu, um für jede Option unterschiedliche Inhalte anzuzeigen. </p> <p>Mein Code lautet wie folgt. </p> <p>In VSC werden keine Fehler gemeldet, aber der Text im Tag <code><h2></code> wird immer angezeigt, unabhängig vom Wert von <code>review.reviewPrivacy</code> unabhängig davon, ob es gleich <code>keepFullyPrivate</code> ist. </p> <pre class="brush:php;toolbar:false;"><div v-if="('review.reviewPrivacy', '==', 'keepFullyPrivate')"><h2> Die Identität des Kommentators ist privat</h2></div></pre> <p>Update (zusätzliche Informationen): </p> <ul> <li>Ich verwende die Version Vue 3.2.1</li> <li>Die von Firestore erhaltenen Daten sind korrekt. Im selben übergeordneten Element wie der obige Code befindet sich beispielsweise diese Codezeile <code><p>Datenschutzoptionen für diese Bewertung: {{ review.reviewPrivacy }}</p></code> Zeigen Sie den folgenden Text an: <em>Datenschutzoptionen für diesen Kommentar: postAnonPublic</em>, was eine <code>v-else-if</code>-Bedingung ist. </li> </ul> <p>Zweites Update: Wie in den Kommentaren gefordert, machen Sie den Code zu einem vollständigen Block: </p> <pre class="brush:php;toolbar:false;"><div class="review-detailZ"> <div> <!-- BEGIN Hauptspalte (links) --> <p>Datenschutzoptionen für diese Bewertung: {{ review.reviewPrivacy }}</p> <br /> <!-- Mit Vue 3.2.1-Version --> <div v-if="('review.reviewPrivacy', '==', 'keepFullyPrivate')"><h2>Die Identität des Rezensenten ist privat</h2></div> <div v-else-if="('review.reviewPrivacy', '==', 'postAnonPublic')"><h2>Anonym – Rezensent: {{ review.userName }}</ h2> ;</div> <div v-else><h2>Der Rezensent hat die vollständige Offenlegung gewählt – vollständiger Name {{ review.userFirstName }} {{ review.userLastName }}</h2></div> <br /> <p>Vor {{ review.createdAt }} Tagen erstellt</p> <br /> </div></pre> <p>Vielen Dank! </p>
P粉007288593P粉007288593497 Tage vor554

Antworte allen(2)Ich werde antworten

  • P粉864872812

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

    new Vue({
      el: "#app",
      data: {
        review: { reviewPrivacy:0 },
        keepFullyPrivate:0
      }
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
    <div id="app">
    <div v-if="review.reviewPrivacy == keepFullyPrivate">
       <h2>评论者的身份是私密的</h2>
    </div>
    <div v-else>
    <h2>其他部分</h2>
    </div>
    </div>

    Antwort
    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>
    

    Antwort
    0
  • StornierenAntwort