неправильный ответ ngClass

После множества вопросов я решил задать этот вопрос... Угловой [ngClass] странно работает со значениями 10, 24, 100. Я не знаю причину этого. Надеюсь, вы все можете помочь ...

<div class="clearfix table-responsive mt-5">
      <table id="data_upload1" class=" table table-bordered table-striped table-hover selectParent">
        <thead>
          <tr>
              <th class="pointer">Obs</th>
              <th class="pointer">Date</th>
              <th class="pointer">Price</th>
              <th class="pointer">% Change</th>
            </tr>
        </thead>
        <tbody>
           <ng-container *ngFor="let price of priceList">
                            <tr> 
                                <td >{{price.serial}}</td>
                                <td >{{price.period}} </td>
                                <td ><input autofocus (blur)="updateValue($event, price.price)" type="text"
                                      [value]="value"  [(ngModel)] = "price.price" placeholder = ""   /></td>
                                <td [ngClass]="price.change >= price.hold  ? 'red': 'greenn'">{{price.change}} </td>
                            </tr>
              </ng-container> 
        </tbody>
      </table>
    </div>
    <button type="button" id="add_user_submit" class="btn btn-blue1 center-block">Save</button>
  </div>
</div>  

Это формат JSON из бэкэнда

0:{id: 101, price: 40, period: "2018-02-01", hold: "10", change: "n.a."}
1:{id: 102, price: 42, period: "2018-03-01", hold: "10", change: "5.00"}
2:{id: 103, price: 43, period: "2018-04-01", hold: "10", change: "2.38"}
length:3

ngClass выбирает неправильный класс для таких значений, как 10, 100, 24. Вместо зеленого цвета фон отображается красным цветом.


person Mayank Agarwal    schedule 02.08.2018    source источник


Ответы (3)


price.change >= price.hold

Вы сравниваете две строки.

Если вы хотите сравнить два числа, я предлагаю вам изменить свои данные на

0:{id: 101, price: 40, period: "2018-02-01", hold: 10, change: null}
1:{id: 102, price: 42, period: "2018-03-01", hold: 10, change: 5.00}
2:{id: 103, price: 43, period: "2018-04-01", hold: 10, change: 2.38}

И ваше сравнение с

price.change && price.change >= price.hold
person Community    schedule 02.08.2018

В вашем задании ни одно из условий не удовлетворяется. и вы сравниваете две строки. Если вы хотите сравнить два числа, используйте «+» над строкой.

Например: преобразовать строку в число: [ngClass]="(+price.change) >= (price.hold == 'n.a.' ? 0: (+price.hold)) ? 'red': 'greenn'"

person Shashikant Devani    schedule 02.08.2018

попробуйте так:

  <tr *ngFor="let price of priceList"> 
      <td >{{price.serial}}</td>
      <td >{{price.period}} </td>
      <td ><input autofocus type="text" [(ngModel)] = "price.price" placeholder = ""   /></td>
      <td [ngClass]="(+price.change || 0) >= (+price.hold || 0) ? 'red': 'greenn'">{{price.change}} </td>
  </tr>

(+price.change || 0) это преобразует строку в число, и в случае неудачного преобразования, если значение не является допустимым числом, мы получим значение 0 в качестве запасного варианта.

Я думаю, вам не нужно использовать [value]="value" и (blur)="updateValue($event, price.price) это то, что будет делать ngModel

person malbarmavi    schedule 02.08.2018