ngClass错误答案
ngClass wrong answer
在经历了很多问题之后,我决定问这个...
angular [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 等值上选择了错误的 class 而不是绿色,它以红色显示背景。
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
In Your Given none 条件满足。并且您正在比较两个字符串。如果您想比较两个数字,请在您的字符串上方使用“+”。
像这样:将字符串转换为数字:
[ngClass]="(+price.change) >= (price.hold == 'n.a.' ? 0 : (+price.hold)) ? 'red': 'greenn'"
试试这个方法:
<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)
this will convert the string to number and in
case the conversion has failed if the value not valid number we will
get the 0 value as fallback
我认为你不需要使用 [value]="value"
和 (blur)="updateValue($event, price.price)
这就是 ngModel 会做的事情
在经历了很多问题之后,我决定问这个... angular [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 等值上选择了错误的 class 而不是绿色,它以红色显示背景。
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
In Your Given none 条件满足。并且您正在比较两个字符串。如果您想比较两个数字,请在您的字符串上方使用“+”。
像这样:将字符串转换为数字: [ngClass]="(+price.change) >= (price.hold == 'n.a.' ? 0 : (+price.hold)) ? 'red': 'greenn'"
试试这个方法:
<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)
this will convert the string to number and in case the conversion has failed if the value not valid number we will get the 0 value as fallback
我认为你不需要使用 [value]="value"
和 (blur)="updateValue($event, price.price)
这就是 ngModel 会做的事情