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

Angular operatora porównania różny od: string
K5
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 5 lat
  • Postów:27
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:

Kopiuj
<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

Chramar
  • Rejestracja:około 7 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Poznań
  • Postów:46
0
K5
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...
K5
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?
K5
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 5 lat
  • Postów:27
0

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

screenshot-20190831203525.png

A1
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 3 lata
  • Postów:23
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

K5
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.
K5
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?
VE
Zrób sobie jakiś obiekt mapujący const mapNumberToStatus = {0: 'Accepted', 1: 'Rejected'} i potem uzywaj wartosci z bazy mapNumberToStatus[valueFromDatabase]
K5
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!
VE
Jeszcze lepiej jakbyś zrobił jakiegoś enuma.
K5
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 5 lat
  • Postów:27
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

A1
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 3 lata
  • Postów:23
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

Kopiuj
<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.

K5
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 :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.