No VueJS, podemos adicionar ou remover um elemento DOM usando v-if:
<button v-if="isRequired">Important Button</button>
mas existe uma maneira de adicionar / remover atributos de um elemento dom, por exemplo, para o seguinte definir condicionalmente o atributo obrigatório:
Username: <input type="text" name="username" required>
por algo semelhante a:
Username: <input type="text" name="username" v-if="name.required" required>
Alguma ideia?
javascript
vue.js
vuejs2
Don Smythe
fonte
fonte
null
,undefined
oufalse
” , que é diferente de um script JS avaliar como false. Isso significa que uma string vazia é falsa em JavaScript, mas ainda adicionaria o atributo ao DOM. Para evitar isso você pode tentarv-bind:name="name || false"
false
ao componente filho por meio de um prop?'false'
. Em outros casos, quando você precisa controlar a presença de atributo html não booleano no elemento, você pode usar a renderização condicionalv-if
como sugerido aqui: github.com/vuejs/vue/issues/7552#issuecomment-361395234attribute
mas NÃOprop
. Podemos passar com segurança explícitofalse
por meio de uma propriedade de componente, mas NÃO de um atributo (que não é reconhecido como uma propriedade). Estou correcto?Respostas:
Experimentar:
fonte
<input v-bind:required="test ? true : false">
anythingAtAll : ? true : false
(ouif (condition) { return true; } else { return false; }
) em qualquer idioma é ... impróprio . Basta usarreturn (condition)
ou, neste caso,<input :required="test">
test
éboolean
, você pode usar:required="test"
String
valor, ao defini-la comofalse
você receberá umtype check
erro. Portanto, defina-o como emundefined
vez de falso. docs:required="required"
whererequired
is uma propriedade de componente Boolean resulta em <el required = "required"> para mimForma mais simples:
fonte
String
valor, ao defini-la comofalse
você receberá umtype check
erro. Portanto, defina-o como emundefined
vez de falso. docs!!
Nunca vi essa sintaxe antes de ontem e durante uma revisão de código me deparei com o seguinte: -<input :required="!!!recipe.checked" v-model="recipe.pieType"><select :required="!!!recipe.checked" v-model="recipe.ingredients" :options="ingredients"></select>
Você saberia o que!!!
(3) significa para um:required
valor? Obrigado.<input :required="condition">
Você não precisa
<input :required="test ? true : false">
porque se teste for verdadeiro, você já obterá orequired
atributo, e se teste for falso, você não obterá o atributo. Atrue : false
parte é redundante, bem assim ...A maneira mais simples de fazer essa ligação, então, é
<input :required="condition">
Somente se o teste (ou condição ) puder ser mal interpretado, você precisará fazer outra coisa; nesse caso, o uso de Syed resolve
!!
o problema.<input :required="!!condition">
fonte
Você pode passar
boolean
por coagir, colocar!!
antes da variável.Mas eu gostaria de chamar sua atenção para o seguinte caso em que o componente receptor foi definido
type
para adereços. Nesse caso, seisRequired
tiver definido o tipo como sendostring
aprovadoboolean
, a verificação do tipo de make falha e você receberá o aviso Vue. Para consertar isso, você pode evitar passar pelo suporte, então apenas coloqueundefined
fallback e o suporte não será enviado paracomponent
Explicação
Eu já passei pelo mesmo problema e tentei as soluções acima !! Sim, não vejo o,
prop
mas isso realmente não cumpre o que é exigido aqui.Meu problema -
No caso acima, o que eu esperava é não ter sido
my-prop
passado para o componente filho -<any-conponent/>
não vejo a entradaprop
,DOM
mas no meu<any-component/>
componente, surge um erro de falha na verificação do tipo de prop. Como no componente filho, esperomy-prop
ser um,String
mas éboolean
.O que significa que esse componente filho recebeu o prop, mesmo que seja
false
. O ajuste aqui é permitir que o componente filho receba odefault-value
e também ignore a verificação.undefined
Obras aprovadas embora!Isso funciona e meu objeto filho está tendo o valor padrão.
fonte
Em uso html
E definir na propriedade de dados como
fonte