aber gibt es eine Möglichkeit, Attribute eines Dom-Elements hinzuzufügen / zu entfernen, z. B. für das folgende bedingte Setzen des erforderlichen Attributs:
Obwohl es nicht so offensichtlich ist (daher die Verwirrung), sagt die Dokumentation tatsächlich, dass, wenn der Attributwert als falsch ausgewertet wird, das Attribut weggelassen wird (vuejs.org/v2/guide/syntax.html#Attributes)
– AlexanderB
24. Januar 2018 um 19:00 Uhr
Tatsächlich sagt die Dokumentation, dass das Attribut nicht hinzugefügt wird, wenn „… hat den Wert von null, undefinedoder false”, was sich von einem JS-Skript unterscheidet, das mit „false“ ausgewertet wird. Dies bedeutet, dass ein leerer String in JavaScript falsch ist, aber das Attribut trotzdem zu DOM hinzufügen würde. Um das zu verhindern, könnten Sie versuchen v-bind:name="name || false"
– Denilson Sá Maia
6. September 2019 um 14:08 Uhr
@AlexanderB Wenn das stimmt, wie kann ich explizit weitergeben? false zu einer untergeordneten Komponente über eine Stütze?
– Bruce Sonne
15. April 2020 um 9:47 Uhr
@BruceSun , Wenn das Attribut im Kontext “unbeabsichtigt” verschwindet, wenn Sie ihm einen falschen Wert geben, versuchen Sie, es als Zeichenfolge zu übergeben 'false'. In anderen Fällen, wenn Sie das Vorhandensein eines nicht-booleschen HTML-Attributs für das Element steuern müssen, können Sie bedingtes Rendering verwenden v-if wie hier vorgeschlagen: github.com/vuejs/vue/issues/7552#issuecomment-361395234
– AlexanderB
16. April 2020 um 10:59 Uhr
@AlexanderB Ich glaube, ich muss mich korrigieren – sollte ich sagen attribute aber nicht prop. Wir können getrost explizit weitergeben false über eine Komponenteneigenschaft, aber NICHT über ein Attribut (das nicht als Eigenschaft erkannt wird). Hab ich recht?
– Bruce Sonne
20. April 2020 um 8:41 Uhr
cymruu
Versuchen:
<input :required="test ? true : false">
Update: Es hat sich in Vue 3 geändert, siehe diese Antwort https://stackoverflow.com/a/64598898
Langform ist <input v-bind:required="test ? true : false">
– nathanielobrown
9. Mai 2017 um 14:13 Uhr
anythingAtAll : ? true : false (oder if (condition) { return true; } else { return false; }) in jeder Sprache ist … unziemlich. Benutz einfach return (condition) oder in diesem Fall <input :required="test">
– Stefan P
21. Mai 2018 um 17:15 Uhr
wenn Sie sicher sind, dass Variable test ist booleankönnen Sie einfach verwenden :required="test"
– tstr
6. Juli 2018 um 9:14 Uhr
verwenden :required="required" wo required ist eine boolesche Komponenteneigenschaft, die für mich zu führt
– Andreas Castellano
5. Februar 2019 um 16:02 Uhr
Beachten Sie, dass sich dies mit Vue 3 geändert hat, siehe eine der Antworten weiter unten
– Connor Shea
29. Mai 2021 um 18:48 Uhr
Syd
Einfachste Form:
<input :required="test"> // if true
<input :required="!test"> // if false
<input :required="!!test"> // test ? true : false
Bitte beachten Sie, dass dies bauteilabhängig ist! Es ist möglich, dass Ihre Unterkunft dies akzeptiert String Wert, indem Sie es auf setzen false Sie erhalten type check Error. Also auf stellen undefined statt falsch. Dokumente
– Traxo
18. Juli 2018 um 10:06 Uhr
@Syed Ihre Antwort mit doppelten Ausrufezeichen !! Ich habe diese Syntax vor gestern noch nie gesehen und bin bei einer Codeüberprüfung auf Folgendes gestoßen: — <input :required="!!!recipe.checked" v-model="recipe.pieType"><select :required="!!!recipe.checked" v-model="recipe.ingredients" :options="ingredients"></select> Weißt du was !!! (3) bedeuten für a :required Wert? Vielen Dank.
– Chris22
10. August 2018 um 15:52 Uhr
@Chris22 Es gibt keinen Unterschied zwischen !test und !!!test, da !!!test nur !!(!test) ist und da !test ein boolescher Wert ist, ist !!(!test) nur seine doppelte Negation, also die gleich. Überprüfen Sie dies: stackoverflow.com/a/25318045/1292050
– Syd
10. August 2018 um 20:08 Uhr
@Syed danke. Nach Ihrem Link habe ich auch diesen gefunden und stimme zu. :^)
– Chris22
13. August 2018 um 16:36 Uhr
Was @Syed gesagt hat, ist nicht falsch
– guter Sohn
4. März 2019 um 21:02 Uhr
Jouni Kantola
Bedingte Darstellung von Attributen in Vue 3 geändert. Um eine Attributverwendung wegzulassen null oder undefined.
undefined funktioniert gut mit einigen der Vue-Pakete, die ich verwende
– itsoft3g
16. Juni 2021 um 13:17 Uhr
Richtige, vollständige und prägnante Antwort, danke.
– Miguel
4. August 2021 um 10:20 Uhr
<input :required="condition">
Du brauchst nicht <input :required="test ? true : false"> weil wenn Prüfung ist Wahrheit die bekommst du schon required Attribut, und wenn Prüfung ist falsch Sie erhalten das Attribut nicht. Das true : false Teil ist überflüssig, so ähnlich …
if (condition) {
return true;
} else {
return false;
}
// or this...
return condition ? true : false;
// can *always* be replaced by...
return (condition); // parentheses generally not needed
Der einfachste Weg, diese Bindung durchzuführen, ist dann <input :required="condition">
Nur wenn die Prüfung (oder Bedingung) kann falsch interpretiert werden, müssten Sie etwas anderes tun; in diesem Fall Syeds Verwendung von !! macht den Trick. <input :required="!!condition">
Satyam Pathak
Du kannst passieren boolean durch Zwang, setzen !! vor der Variable.
let isRequired = '' || null || undefined
<input :required="!!isRequired"> // it will coerce value to respective boolean
Aber ich möchte Ihre Aufmerksamkeit auf den folgenden Fall lenken, in dem die empfangende Komponente definiert hat type für Requisiten. In diesem Fall, wenn isRequired hat den zu seinden Typ definiert string dann vorbei boolean make it type check schlägt fehl und Sie erhalten eine Vue-Warnung. Um dies zu beheben, möchten Sie möglicherweise vermeiden, diese Stütze zu passieren, also setzen Sie einfach undefined Fallback und die Stütze wird nicht gesendet component
let isValue = false
<any-component
:my-prop="isValue ? 'Hey I am when the value exist' : undefined"
/>
Erläuterung
Ich habe das gleiche Problem durchgemacht und die oben genannten Lösungen ausprobiert !! Ja, ich sehe die nicht prop aber das erfüllt eigentlich nicht das, was hier gefordert wird.
Mein Problem –
let isValid = false
<any-component
:my-prop="isValue ? 'Hey I am when the value exist': false"
/>
Im obigen Fall habe ich nicht erwartet, dass ich es habe my-prop an die untergeordnete Komponente übergeben werden – <any-conponent/> Ich sehe die nicht prop in DOM aber in meinem <any-component/> Komponente, erscheint ein Fehler bei einem Fehler bei der Überprüfung des Prop-Typs. Wie in der untergeordneten Komponente erwarte ich my-prop ein … zu sein String aber es ist boolean.
Dies bedeutet, dass die untergeordnete Komponente die Requisite erhalten hat, selbst wenn dies der Fall ist false. Optimieren Sie hier, um die untergeordnete Komponente übernehmen zu lassen default-value und überspringen Sie auch die Prüfung. Bestanden undefined funktioniert aber!
<any-component
:my-prop="isValue ? 'Hey I am when the value exist' : undefined"
/>
Dies funktioniert und meine untergeordnete Prop hat den Standardwert.
Dies hat bei mir funktioniert, als ich mit ausgewählten Optionen (und dem ausgewählten Attribut) gearbeitet habe.
– max
29. März 2021 um 18:08 Uhr
Es ist bemerkenswert zu verstehen, dass Sie, wenn Sie Attribute bedingt hinzufügen möchten, auch eine dynamische Deklaration hinzufügen können:
Obwohl es nicht so offensichtlich ist (daher die Verwirrung), sagt die Dokumentation tatsächlich, dass, wenn der Attributwert als falsch ausgewertet wird, das Attribut weggelassen wird (vuejs.org/v2/guide/syntax.html#Attributes)
– AlexanderB
24. Januar 2018 um 19:00 Uhr
Tatsächlich sagt die Dokumentation, dass das Attribut nicht hinzugefügt wird, wenn „… hat den Wert von
null
,undefined
oderfalse
”, was sich von einem JS-Skript unterscheidet, das mit „false“ ausgewertet wird. Dies bedeutet, dass ein leerer String in JavaScript falsch ist, aber das Attribut trotzdem zu DOM hinzufügen würde. Um das zu verhindern, könnten Sie versuchenv-bind:name="name || false"
– Denilson Sá Maia
6. September 2019 um 14:08 Uhr
@AlexanderB Wenn das stimmt, wie kann ich explizit weitergeben?
false
zu einer untergeordneten Komponente über eine Stütze?– Bruce Sonne
15. April 2020 um 9:47 Uhr
@BruceSun , Wenn das Attribut im Kontext “unbeabsichtigt” verschwindet, wenn Sie ihm einen falschen Wert geben, versuchen Sie, es als Zeichenfolge zu übergeben
'false'
. In anderen Fällen, wenn Sie das Vorhandensein eines nicht-booleschen HTML-Attributs für das Element steuern müssen, können Sie bedingtes Rendering verwendenv-if
wie hier vorgeschlagen: github.com/vuejs/vue/issues/7552#issuecomment-361395234– AlexanderB
16. April 2020 um 10:59 Uhr
@AlexanderB Ich glaube, ich muss mich korrigieren – sollte ich sagen
attribute
aber nichtprop
. Wir können getrost explizit weitergebenfalse
über eine Komponenteneigenschaft, aber NICHT über ein Attribut (das nicht als Eigenschaft erkannt wird). Hab ich recht?– Bruce Sonne
20. April 2020 um 8:41 Uhr