值不会在视图上更新

Manujaya Premathilaka

场景:-我有一个简单的组件,可以提取数据并在视图中显示。有2个下拉菜单当我从第二个下拉列表中选择一个值时,它将从API提取一些其他数据,并将它们分配给相关变量。最后,我在变量中使用这些值以在某些文本框中显示。

问题:-当我选择一个值时,它成功地从API提取了相关数据并分配给了变量。但是它不会在视图中更新。如果单击视图的某处(不在空白处的按钮上),它将立即在文本框中显示值。

component.ts:-

import {ChangeDetectorRef, Component, OnInit, SimpleChange} from '@angular/core';

import { DashboardService} from "@modules/dashboard/services";
// import { dashboardItemsModel} from "@modules/dashboard/components/dashboard-items/dashboard-items.model";

@Component({
  selector: 'sb-dashboard-items',
  templateUrl: './dashboard-items.component.html',
  styleUrls: ['./dashboard-items.component.scss']
})
export class DashboardItemsComponent implements OnInit {
    items : String[];
    selectedItems : {itemName : String, price : number}[] = [];
    addedItems : {itemName : String, quantity : number, price : number}[] =JSON.parse(localStorage.getItem('addedItems'));
    selectedItemType : String = ''
    selectedItemName : String = ''
    selectedItemDetails : {availableAmount: number, batch: String, expirationDate: String, flavour: String, itemId: number, itemName: String, liter: number, price: number, type: String}
    selectedItemAvailability : number
    selectedItemPrice : number
    selectedItemQuantity : number
    selectedItemDiscount : number
    discount : number = 0

  constructor(
     private dashboardService : DashboardService,
     private changeDetectorRef : ChangeDetectorRef
  ) {
        localStorage.setItem('addedItems', JSON.stringify(this.addedItems))
  }

  ngOnInit(): void {
      this.dashboardService.getItems()
          .subscribe(response => {
              this.items = response;
              this.changeDetectorRef.detectChanges();
          })
    }

  ngOnChanges(changes: SimpleChange){
        this.addedItems = JSON.parse(localStorage.getItem('addedItems'))
  }

  selectItemType(){
      //implementation
  }

  increment(itemName){
        //implementation
  }

  decrement(itemName){
        //implementation
  }

  delete(itemName){
        //implementation
  }

   getItemDetails(){
       this.dashboardService.getItemCount(this.selectedItemName)
          .subscribe(  async response => {
              this.selectedItemDetails = await response[0]                   //<------- this is the method used to fetch data from the API and assign to variables
              this.selectedItemAvailability = response[0].availableAmount
              this.selectedItemPrice = response[0].price
          })
    }

  add(){
      //implementation
  }

  getTotal(){
        //implementation
  }

  getSubTotal(){
        //implementation
  }

  checkQuantity(){
        //implementation
  }
}

component.html

<div class="row ml-3 mr-3 mt-3">
            <label class="col-form-label">Select Category :</label>
            <select class="form-control" [(ngModel)]="selectedItemType" (ngModelChange)="selectItemType()">
                <option value="" [selected]="true"> Please choose one </option>
                <option *ngFor="let item of items">{{item}}</option>
            </select>
        </div>
        <div class="row ml-3 mr-3 mt-3">
            <label class="col-form-label">Select Item :</label>
            <select class="form-control" [(ngModel)]="selectedItemName" (ngModelChange)="getItemDetails()">
                <option value="" [selected]="true"> Please choose one </option>
                <option *ngFor="let selectedItem of selectedItems">{{selectedItem.itemName}}</option>
            </select>
        </div>
        <div class="row ml-3 mr-3 mt-3">
            <div class="column mr-3">
                <label class="col-form-label">
                    Available Amount : <br/><input type="number"
                                                   class="mr-3"
                                                   [(ngModel)]="selectedItemAvailability" //<----- should update imediately when I select a value from the 2nd drop down
                                                   [disabled]="true">
                </label>
            </div>
            <div class="column ml-5">
                <label class="col-form-label">
                    Enter Quantity : <br/><input type="number"
                                                 [min]="1"
                                                 [max]="selectedItemAvailability"
                                                 [(ngModel)]="selectedItemQuantity">
                </label>
            </div>
        </div>
        <div class="row ml-3 mr-3 mt-3">
            <div class="column mr-3">
                <label class="col-form-label">
                    Price : <br/><input type="number"
                                        [min]="0"
                                        class="mr-3"
                                        [(ngModel)]="selectedItemPrice"> //<----- should update imediately when I select a value from the 2nd drop down
                </label>
            </div>
            <div class="column ml-5">
                <label class="col-form-label">
                    Item Discount : <br/><input type="number"
                                                [min]="0"
                                                [max]="100"
                                                class="mr-3"
                                                [(ngModel)]="selectedItemDiscount">
                </label>
            </div>
        </div>

如何解决此问题?提前致谢!

安东尼奥

this.changeDetectorRef.detectChanges();分配后致电

   getItemDetails(){
       this.dashboardService.getItemCount(this.selectedItemName)
          .subscribe(  async response => {
              this.selectedItemDetails = await response[0]                   //<------- this is the method used to fetch data from the API and assign to variables
              this.selectedItemAvailability = response[0].availableAmount
              this.selectedItemPrice = response[0].price;
              this.changeDetectorRef.detectChanges();
          })
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

更改后角度8值将不会在视图上更新

angularjs $广播不会在视图上反映值

自定义注释在更新后不会在地图视图上更新

Bootstrap 导航栏不会在移动视图上折叠

addSublayer不会在视图上添加任何子层

SwiftUI视图不会在单独的视图中更新

React 视图不会在状态更改时更新

在SwiftUI中,视图不会在ForEach内部更新

AngularJS不会在异步模型更改时更新视图

Angular 不会在数组推送时更新视图

表单控件更新值不会在ngOnInit()中更新

如果我在api.onchange方法中更改字段值,则该值不会在视图中更新。为什么?

Flutter TextFormField不会在重建时更新值

ngModel不会在更改时更新值

$onChanges 不会在组件初始化时更新值

状态的默认值不会在渲染之间更新

输入值不会在托管Bean中更新

React Select不会在单击选项时更新值

ngFor不会在Angular中实时更新列表值

PHP不会在mysql上更新+1值

变量的值不会在组件内部更新

使用jQuery中的常见div ID,按钮不会在多个视图上消失

深入我的http请求不会在视图上显示所需的数据

SwiftUI自定义视图的ViewBuilder不会在子类ObservedObject更新时重新渲染/更新

Angularjs-Charts.js:同一图表元素不会在其他视图上重绘

MVC 视图数据不会在 jQuery Post 上更新,但会在表单提交按钮单击时更新

ListView不会在拖放时更新

AngularJS 分页表:limitTo 参数不会在视图中更新

Angular 2视图不会在数组更改时更新