En VueJS podemos agregar o eliminar un elemento DOM usando v-if:
<button v-if="isRequired">Important Button</button>
pero, ¿hay alguna manera de agregar / eliminar atributos de un elemento dom? Por ejemplo, para lo siguiente, establezca condicionalmente el atributo requerido:
Username: <input type="text" name="username" required>
por algo similar a:
Username: <input type="text" name="username" v-if="name.required" required>
¿Algunas ideas?
javascript
vue.js
vuejs2
Don Smythe
fuente
fuente
null
,undefined
ofalse
” , que es diferente de un script JS evaluar a falso. Esto significa que una cadena vacía es falsa en JavaScript, pero aún agregaría el atributo a DOM. Para evitar que puedas intentarlov-bind:name="name || false"
false
al componente secundario a través de un accesorio?'false'
. En otros casos, cuando necesite controlar la presencia de un atributo html no booleano en el elemento, puede usar la representación condicionalv-if
como se sugiere aquí: github.com/vuejs/vue/issues/7552#issuecomment-361395234attribute
pero NOprop
. Podemos pasar de forma segura explícitamente afalse
través de una propiedad de componente pero NO de un atributo (que no se reconoce como una propiedad). ¿Estoy en lo correcto?Respuestas:
Tratar:
fuente
<input v-bind:required="test ? true : false">
anythingAtAll : ? true : false
(oif (condition) { return true; } else { return false; }
) en cualquier idioma es ... indecoroso . Simplemente usereturn (condition)
o, en este caso,<input :required="test">
test
esboolean
, puede usar:required="test"
String
valor, al configurarlofalse
, obtenga untype check
error. Así que configúrelo enundefined
lugar de falso. docs:required="required"
whererequired
es una propiedad de componente booleana da como resultado <el required = "required"> para míLa forma mas simple:
fuente
String
valor, al configurarlofalse
, obtenga untype check
error. Así que configúrelo enundefined
lugar de falso. docs!!
Nunca había visto esa sintaxis antes de ayer y durante una revisión de código me encontré con esto: -<input :required="!!!recipe.checked" v-model="recipe.pieType"><select :required="!!!recipe.checked" v-model="recipe.ingredients" :options="ingredients"></select>
¿Sabes qué!!!
significa (3) para un:required
valor? Gracias.<input :required="condition">
No es necesario
<input :required="test ? true : false">
porque si la prueba es verdadera , ya obtendrá elrequired
atributo, y si la prueba es falsa , no obtendrá el atributo. Latrue : false
parte es redundante, muy parecida a esta ...La forma más sencilla de hacer este enlace, entonces, es
<input :required="condition">
Solo si la prueba (o condición ) puede malinterpretarse, necesitaría hacer otra cosa; en ese caso, el uso de Syed
!!
hace el truco.<input :required="!!condition">
fuente
Puede pasar
boolean
forzándolo, ponerlo!!
antes de la variable.Pero me gustaría llamar su atención sobre el siguiente caso en el que el componente receptor se ha definido
type
para accesorios. En ese caso, siisRequired
ha definido el tipo parastring
pasar,boolean
haga que la verificación de tipo falle y obtendrá una advertencia de Vue. Para solucionarlo, es posible que desee evitar pasar ese accesorio, así que simplemente coloque elundefined
respaldo y el accesorio no se enviará acomponent
Explicación
¡He pasado por el mismo problema y he probado las soluciones anteriores! Sí, no veo el
prop
pero eso en realidad no cumple con lo requerido aquí.Mi problema -
En el caso anterior, lo que esperaba es que no se haya
my-prop
pasado al componente secundario;<any-conponent/>
no veo elprop
in,DOM
pero en mi<any-component/>
componente, aparece un error del error de verificación del tipo de prop. Como en el componente hijo, esperomy-prop
ser unString
pero lo esboolean
.Lo que significa que el componente hijo recibió el accesorio incluso si lo es
false
. El ajuste aquí es permitir que el componente secundario tomedefault-value
el control y también se salte la verificación. ¡undefined
Trabajos aprobados !Esto funciona y mi accesorio infantil tiene el valor predeterminado.
fuente
En uso html
Y definir en propiedad de datos como
fuente