Angular operatora porównania różny od: string

Odpowiedz Nowy wątek
2019-08-31 16:54
0

Hej,

Mam do was pytanie. Próbuje zrobić w html, aby podczas gdy wartość "Zatwierdzenia" jest różna od "Accepted" to przycisk był wyłączony. Gdy to implementuje w ten sposób to wszystkie buttony robią się wyłączone. Coś robię źle? Dodałem porównanie do liczby tak dla sprawdzenia i to działa poprawnie.

HTML:

<div id="Vtable"><h1> Vacation's List</h1>
    <table class="table">
      <tbody>
            <td>Name</td>
            <td>Vacation start</td>
            <td>Vacation end</td>
            <td>Superior</td>
            <td>Number of days</td>
            <td>Vacation status</td>
        <tr *ngFor="let vacation of vacations">
      <td>{{vacation.userName}}</td>
      <td>{{vacation.vacationStart}}</td>
      <td>{{vacation.vacationEnd}}</td>
      <td>{{vacation.superior}}</td>
      <td>{{vacation.numberOfDays}}</td>
      <td>{{vacation.status}}</td>
      <td><button [disabled]="vacation.status!='Accepted'">Accept</button></td>
      <td><button [disabled]="vacation.numberOfDays!=1">Accept</button></td>
        </tr>
        </tbody>
    </table>
    </div>

Poniżej wynik tego działania:
screenshot-20190831165409.png

Pozostało 580 znaków

2019-08-31 19:44
0

Najprawdopodobniej problem masz tu: https://developer.mozilla.org[...]ory/Operatory_por%C3%B3wnania

!== zamiast !=

No własnie nie, też próbowałem tego i dokładnie ten sam efekt... próbowałem też zamieniać znaki " i ' ale to samo... - kain555 2019-08-31 19:50
To może inaczej, jak mogę zadeklarować jakieś funkcje do tego buttona tylko w componencie? Może html coś źle czyta tą funkcję i lepiej będzie to zrobić w componencie. Jak mogę się odnieść do właśnie tego buttona? - kain555 2019-08-31 19:59

Pozostało 580 znaków

2019-08-31 20:35
0

Ogólnie jest coś nie tak, jakby warunek w ogóle nie był czytany...

screenshot-20190831203525.png

Pozostało 580 znaków

2019-09-01 14:14
0

O ile nie dostajesz jakis bledow w konsoli to warunek [disabled]="vacation.status!='Accepted'" jest najbardziej sprawdzany i w kazdym przypadku dostajesz po prostu true.
Ja najpierw sprawdzilbym czy aby na pewno wlasciwosc status obiektu vacationjest rzeczywiscie stringiem bo dla mnie to bardziej sie to nadaje na jakiegos boola albo numbera.
No a jesli jest stringiem no to napisz sobie jakas prosta metode getVacationStatus(vacation:Vacation) i debuguj co tam sie dzieje i dlaczego nie dostajesz true badz false

No właśnie nie, jest to string, w bazie jest string, przez api pobierany jest string... Chciałem na początku uprościć bez mapowania żeby w ogóle działało, dlatego jest stringiem, wydawało mi się że porównywanie stringów jest tak samo proste jak liczb. No cóż spróbuję to debugować i zobaczymy gdzie jest błąd. Podpowiesz mi jak mogę się odnieść do tego buttona w componencie? Może jak zaprogramuje to w componencie to będzie działało. Przepraszam za newbe pytania ale z Angularem mam do czynienia zaledwie kilkanaście dni. - kain555 2019-09-01 21:16
W sumie jeszcze mam pytanie, jak mogę przypisać wartości które będą wyświetlane w tabeli? Przykładowo w bazie zrobię żę status jest int a na stronie chce wyświetlać np 0 - accepted, 1- rejected, 2 - waiting for decision. Szukałem na necie ale nie mogłem nic sensownego znaleźć, pomożesz? - kain555 2019-09-01 21:44
Zrób sobie jakiś obiekt mapujący const mapNumberToStatus = {0: 'Accepted', 1: 'Rejected'} i potem uzywaj wartosci z bazy mapNumberToStatus[valueFromDatabase] - Veox 2019-09-02 16:10
Dobra już mam, banał jak zawsze u mnie... Miałem zapisane te rzeczy w nchar(20) i jak sie domyślasz dostawałem "Accepted " i przez te spacje mi nie czytało, bo zapomniałem wcześniej parsa dodać. Dzięki! - kain555 2019-09-02 16:12
Jeszcze lepiej jakbyś zrobił jakiegoś enuma. - Veox 2019-09-02 16:12

Pozostało 580 znaków

2019-09-02 16:16
0

Rozwiązanie:

Z API w JSONie dostawałem "Accepted.............."(kropki to spacje oczywiście), dlatego nie porównywało mi tego stringa. Pamiętajcie aby zawsze parsować dane aby uniknąć takich sytuacji :D

Pozostało 580 znaków

2019-09-02 16:32
1

No właśnie nie, jest to string, w bazie jest string, przez api pobierany jest string... Chciałem na początku uprościć bez mapowania żeby w ogóle działało, dlatego jest stringiem, wydawało mi się że porównywanie stringów jest tak samo proste jak liczb. No cóż spróbuję to debugować i zobaczymy gdzie jest błąd. Podpowiesz mi jak mogę się odnieść do tego buttona w componencie? Może jak zaprogramuje to w componencie to będzie działało. Przepraszam za newbe pytania ale z Angularem mam do czynienia zaledwie kilkanaście dni. - kain555 wczoraj, 21:16

No do konkretnego buttona mozesz sie odwolac na rozny sposob w zaleznosci od tego jak twoj komponent wyglada. Wzorujac sie na tym co podales najprosciej bedzie

<button #buttonRef (click)="onButtonClick(buttonRef)">Accept</button>

Mozesz tez za pomoca ViewChild'a albo przez przypisanie atrybutu id do buttona i standardowe document.getElementById(). Tylko raczej zastanow sie czy generalnie odwolanie sie do buttona cos Ci rzeczywiscie pomoze...

W sumie jeszcze mam pytanie, jak mogę przypisać wartości które będą wyświetlane w tabeli? Przykładowo w bazie zrobię żę status jest int a na stronie chce wyświetlać np 0 - accepted, 1- rejected, 2 - waiting for decision. Szukałem na necie ale nie mogłem nic sensownego znaleźć, pomożesz? -

Nie wiem czy dobrze rozumiem o co Ci chodzi ale upraszczajac calkowicie temat to stworz dwie osobne kolumny cos w rodzaju STATUS i STATUS_NAME. Wtedy pobierajac obiekt z bazy danych otrzymasz to i to i w zaleznosci od potrzeby bedziesz mial mozliwosc wyboru co chcesz wyswietlac a co porownywac.

Dzięki, przyda mi się na przyszłość odwoływanie się do konkretnego buttona, a jeśli chodzi o rozwiązanie mojego problemu to post wyżej napisałem co było nie tak :) - kain555 2019-09-02 16:37

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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