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,undefinedofalse” , 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"falseal 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-ifcomo se sugiere aquí: github.com/vuejs/vue/issues/7552#issuecomment-361395234attributepero NOprop. Podemos pasar de forma segura explícitamente afalsetravé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">testesboolean, puede usar:required="test"Stringvalor, al configurarlofalse, obtenga untype checkerror. Así que configúrelo enundefinedlugar de falso. docs:required="required"whererequiredes una propiedad de componente booleana da como resultado <el required = "required"> para míLa forma mas simple:
fuente
Stringvalor, al configurarlofalse, obtenga untype checkerror. Así que configúrelo enundefinedlugar 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:requiredvalor? Gracias.<input :required="condition">No es necesario
<input :required="test ? true : false">porque si la prueba es verdadera , ya obtendrá elrequiredatributo, y si la prueba es falsa , no obtendrá el atributo. Latrue : falseparte 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
booleanforzá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
typepara accesorios. En ese caso, siisRequiredha definido el tipo parastringpasar,booleanhaga 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 elundefinedrespaldo y el accesorio no se enviará acomponentExplicación
¡He pasado por el mismo problema y he probado las soluciones anteriores! Sí, no veo el
proppero eso en realidad no cumple con lo requerido aquí.Mi problema -
En el caso anterior, lo que esperaba es que no se haya
my-proppasado al componente secundario;<any-conponent/>no veo elpropin,DOMpero en mi<any-component/>componente, aparece un error del error de verificación del tipo de prop. Como en el componente hijo, esperomy-propser unStringpero 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-valueel control y también se salte la verificación. ¡undefinedTrabajos aprobados !Esto funciona y mi accesorio infantil tiene el valor predeterminado.
fuente
En uso html
Y definir en propiedad de datos como
fuente