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

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

0

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

screenshot-20190831203525.png

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 vacation jest 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

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

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.

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