Mam następujące pole formularza, które działa poprawnie. Rozumiem przez to, że po wpisaniu, wklejeniu, itp. Do pola, fooObj.expDate
zostaje zaktualizowany dokładnie w czasie rzeczywistym i następuje walidacja. Mam pre-tag, żeby to dla mnie było oczywiste.Aktualizowanie pola kątowego 2 programowo
<pre>{{fooObj.someDate | json}}</pre>
<div class="form-group inline-form__input">
<label for="someDate">Some Date</label>
<input tabindex="2"
type="tel"
class="form-control"
maxlength="7"
placeholder="MM/YY"
formControlName="someDate"
name="someDate"
[(ngModel)]="fooObj.someDate"
someDate>
</div>
Mam jednak tę dyrektywę someDate
w tym polu. Ta dyrektywa przechwytuje zdarzenia wklejania. Anuluje zdarzenie pasty, czy wymyślnej formatowania wejścia, a następnie robi to:
target.value
jest mój someDate
pola. Wartość zostanie zaktualizowana dobrze wewnątrz pola wprowadzania (widzę, że zmienia się na ekranie wewnątrz wejścia). Jednak fooObj.someDate
NIE jest aktualizowany, a sprawdzanie poprawności nie występuje. Na przykład. ustawienie wartości docelowej w limicie czasu NIE wyzwala tej samej aktualizacji/aktualizacji obiektu, jak wpisanie klucza/wklejenia/dowolnego innego zdarzenia javascript.
kątowa docs nie mają wiele do powiedzenia na użyteczne to:
kątowe aktualizuje wiązania (a więc ekran) tylko wtedy, gdy aplikacja robi coś w odpowiedzi na asynchronicznych zdarzeń, takich jak klawiszy. Ten przykładowy kod wiąże zdarzenie keyup z numerem 0, najkrótszym możliwym szablonem. O ile instrukcja nie robi nic użytecznego, to spełnia wymagania Angulara, aby Angular zaktualizował ekran.
Jak zatem uruchomić aktualizację pola z dyrektywy dotyczącej tego pola?
Edit: Próbowałem wyzwolenie zdarzenia na elemencie zgodnie z zaleceniami w komentarzach przy użyciu kodu znajdującego się tutaj na moim elementu: How can I trigger an onchange event manually?
działa dobrze, ale nie wymusza pole do aktualizacji:
if ("createEvent" in document) {
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true);
this.target.dispatchEvent(evt);
}
else
this.target.fireEvent("onchange");
Również tutaj pojawia się idea syntetycznych zdarzeń, które nie uruchamiają "normalnych" działań jako klucza lub czegoś podobnego (naprawdę mam nadzieję, że błędnie odczytam lub są one błędne w tym przypadku użycia, ale tak się nie stało "). t pracować z próbą ponownego wydania zdarzenia wklejania): https://www.w3.org/TR/clipboard-apis/#clipboard-event-interfaces
UWAGA: Zdarzenia syntetyczne nie mają domyślnych działań. Innymi słowy, podczas gdy powyższy skrypt uruchomi wydarzenie wklejania, dane nie zostaną wklejone do dokumentu.
Czy próbować wywołać 'input' zdarzenie na nim? – Meir
@Meir: Próbowałem ponownie wydać zdarzenie wklejania na nim wcześniej. Powiedziano mi, że to tworzy "syntetyczne" wydarzenie, które nie uruchamia się w taki sam sposób, jak normalne onClick/paste/keyup/cokolwiek. (http://stackoverflow.com/questions/40848003/set-preventdefault-back-to-false-on-javascript-event). Mam zamiar spróbować onChange() i po prostu wydawanie zwykłego zdarzenia KeyUp. – VSO
spróbuj także "input" event – Meir