W VueJS możemy dodać lub usunąć element DOM za pomocą v-if:
<button v-if="isRequired">Important Button</button>
ale czy istnieje sposób na dodanie / usunięcie atrybutów elementu dom, np. dla następującego warunkowego ustawienia wymaganego atrybutu:
Username: <input type="text" name="username" required>
przez coś podobnego do:
Username: <input type="text" name="username" v-if="name.required" required>
Jakieś pomysły?
javascript
vue.js
vuejs2
Don Smythe
źródło
źródło
null
,undefined
lubfalse
” , który różni się od skryptu JS oceniającego false. Oznacza to, że pusty łańcuch jest fałszywy w JavaScript, ale nadal dodawałby atrybut do DOM. Aby temu zapobiec, możesz spróbowaćv-bind:name="name || false"
false
komponent podrzędny za pomocą właściwości?'false'
. W innych przypadkach, gdy chcesz kontrolować obecność atrybutu html niebędącego wartością boolowską w elemencie, możesz użyć renderowania warunkowegov-if
zgodnie z sugestią tutaj: github.com/vuejs/vue/issues/7552#issuecomment-361395234attribute
ale NIEprop
. Możemy bezpiecznie przekazać jawniefalse
poprzez właściwość komponentu, ale NIE atrybut (który nie jest rozpoznawany jako właściwość). Mam rację?Odpowiedzi:
Próbować:
źródło
<input v-bind:required="test ? true : false">
anythingAtAll : ? true : false
(lubif (condition) { return true; } else { return false; }
) w jakimkolwiek języku jest ... niestosowne . Po prostu użyjreturn (condition)
lub, w tym przypadku,<input :required="test">
test
jestboolean
, możesz po prostu użyć:required="test"
String
wartość, to ustawiając ją nafalse
ciebie, wystąpitype check
błąd. Więc ustaw go naundefined
zamiast false. dokumenty:required="required"
gdzierequired
jest właściwością komponentu logicznego skutkuje <el required = "required"> dla mnieNajprostsza forma:
źródło
String
wartość, to ustawiając ją nafalse
ciebie, wystąpitype check
błąd. Więc ustaw go naundefined
zamiast false. dokumenty!!
Nigdy wcześniej nie widziałem tej składni, a podczas przeglądu kodu natknąłem się na to: -<input :required="!!!recipe.checked" v-model="recipe.pieType"><select :required="!!!recipe.checked" v-model="recipe.ingredients" :options="ingredients"></select>
Czy wiesz, co!!!
(3) oznacza dla:required
wartości? Dzięki.<input :required="condition">
Nie potrzebujesz,
<input :required="test ? true : false">
ponieważ jeśli test jest prawdziwy , otrzymasz jużrequired
atrybut, a jeśli test jest fałszywy , nie otrzymasz atrybutu.true : false
Część jest zbędna, podobnie jak to ...Najprostszym sposobem wykonania tego wiązania jest więc
<input :required="condition">
Tylko jeśli test (lub warunek ) może zostać źle zinterpretowany, musisz zrobić coś innego; w takim przypadku użycie przez Syeda załatwia sprawę
!!
.<input :required="!!condition">
źródło
Możesz przejść
boolean
przez wymuszenie, wstawienie go!!
przed zmienną.Chciałbym jednak zwrócić uwagę na następujący przypadek, w którym komponent odbierający zdefiniował
type
dla rekwizytów. W takim przypadku, jeśliisRequired
zdefiniowano typ dostring
przejścia , spraw,boolean
że sprawdzenie typu nie powiedzie się, a otrzymasz ostrzeżenie Vue. Aby to naprawić, możesz chcieć uniknąć przekazywania tej właściwości, więc po prostuundefined
ustaw rezerwę, a prop nie zostanie wysłany docomponent
Wyjaśnienie
Przeszedłem przez ten sam problem i wypróbowałem powyższe rozwiązania !! Tak, nie widzę,
prop
ale to faktycznie nie spełnia tego, czego tutaj wymagamy.Mój problem -
W powyższym przypadku spodziewałem się, że nie
my-prop
zostanie przekazany do komponentu podrzędnego -<any-conponent/>
nie widzę wejścia, aleprop
wDOM
moim<any-component/>
komponencie wyskakuje błąd z niepowodzenia sprawdzania typu właściwości. Podobnie jak w przypadku komponentu podrzędnego, spodziewammy-prop
się, że będzie to,String
ale tak jestboolean
.Co oznacza, że komponent potomny otrzymał prop, nawet jeśli tak jest
false
. Ulepszenie tutaj polega na umożliwieniu komponentowi podrzędnemu przejęcia,default-value
a także pominięciu sprawdzania. Zdaneundefined
jednak działa!To działa, a mój atrybut podrzędny ma wartość domyślną.
źródło
W html użyj
I zdefiniuj we właściwościach danych, takich jak
źródło