Angular - wykrywanie zmian danych na formularzu

0

Cześć,
Dopiero zaczynam poznawać angulara i mam do wykonania pewne zadanie. Zastanawiam się czy jest do tego już jakaś gotowa metoda. Mam formularz z danymi. I teraz kwestia jest tego rodzaju, że można go zatwierdzić tylko wtedy gdy coś się zmieniło. To akurat nie jest problemem. Jest tu jeszcze drugie dno tego zagadnienia. A mianowicie jeżeli otworzymy formularz i w jakimś polu będzie wpisany wraz "kot" i ktoś usunie z niego literę "t" zostawiając samo "ko" to jest to zmiana zawartości. Natomiast jeżeli ktoś wejdzie ponownie w to pole i tą literę dopisze nie zatwierdzając poprzedniej zmiany, to przycisk zatwierdź ma być nieaktywny ponieważ wchodząc na niego użytkownik miał w tym polu wyraz "kot", co prawa coś tam zmodyfikował usuwając literę ale ponownie ją dodał czyli zmiana nie zaszła i przycisk musi się ponownie zrobić nieaktywny. Podrzucicie jakiś pomysł na taką walidację? Nie chodzi mi o gotowe rozwiązanie ale chociaż o info czy jest do tego jakaś metoda angularowa czy może muszę pisać coś swojego.

0

Słabo to opisujesz, czy to ze jeśli ktoś wejdzie i usunie literkę t z kota to znaczy, że to już ma zostać tam zapisane? Jeśli tak to w czym problem? Kim jest druga osoba wchodząca i dostawiajaca literę t? Skoro ja wchodzę i zmieniam kot na ko, to jest to zmiana i nie jest problemem sprawdzenie tego. Jeśli ktoś inny wchodzi na ten sam formularz i widzi ko, a potem dopisuje t to to także jest zmiana i robi się ja tak samo jak wyżej.

Natomiast jeśli jedna osoba wchodzi na forma, usuwa t i potem je dostawia to przecież wartość nie ulega zmianie.

Widzę jescze trzeci przypadek, że formularz może być jednocześnie edytowany przez dwie osoby - ale to już raczej głupota. Jeśli już to można rozglaszac zmianę i oznajmić userowi, że w trakcie jego edycji ktoś inny zaktualizował dane w podanym formie.

1

Możesz zserializować oryginalny obiekt do JSONa i po każdej zmianie porównywać.

0

Nie nie, chodzi o to że jedna osoba może wejść na formularz, usunąć jakąś literę czy zmienić cokolwiek w danych na formularzu ale to jeszcze nic nie zatwierdza. Zatwierdza przycisk, nie zmiana. I póki user tego przycisku nie wciśnie, nic nie zostaje zapisane. I teraz chodzi o to że jeżeli ktoś cokolwiek zmieni na formularzu, przycisk zatwierdź robi się aktywny. Natomiast jeżeli po tej zmianie ale bez zatwierdzenia użytkownik przywróci pierwotny stan formularza, czyli wszystko identycznie tak jak miał wchodząc na niego, to przycisk ma się zrobić nieaktywny ponieważ żadna zmiana nie zaszła. To że ktoś coś zmienił to o niczym nie świadczy ponieważ przywrócił później te dane które były. Tylko ZATWIERDŹ zmienia dane, nie sama ich zmiana dlatego że prócz przycisku do zatwierdzania jest jeszcze przycisk ANULUJ który zupełnie nic nie robi tylko zamyka formularz.

0

Aha, teraz wszystko jasne. Zrób tak jak pisał @some_ONE. Powinno zatrybić :)

0

Ja bym po prostu sprawdzał czy form jest dirty i wtedy aktywował przycisk.

0

Mozesz tez uzyc np valueChanges jesli uzywasz reactive forms lub KeyValueDiffer jesli uzywac template driven forms z ngModel wtedy robisz sobie diff z objektem ktory uzywasz jako ngModel i w ngDoCheck sprawdzasz czy ma zmiany

1 użytkowników online, w tym zalogowanych: 0, gości: 1