【问题标题】:Why select option shows the values only after i click on it?为什么选择选项仅在我单击后才显示值?
【发布时间】:2020-07-02 05:40:13
【问题描述】:

所以基本上在我加载/重新加载页面后,第一次单击时未显示选择选项,并且由于某种原因直到第二次单击时才显示值 很高兴得到一些答案 我还是新手,所以对我温柔一点:)

import { Component, OnInit } from '@angular/core';
import { Company } from '../_models/company';
import { CompanyService } from '../_services/company.service';
import { AlertifyService } from '../_services/alertify.service';



@Component({
  selector: 'app-company',
  templateUrl: './companies.component.html',
  styleUrls: ['./companies.component.css']
})
export class CompaniesComponent implements OnInit  {
  selectedCompany: Company;
  companies: Company[];
  
  
  

  constructor(private companyService: CompanyService, private alertify: AlertifyService) { }




  ngOnInit() {
    this.loadCompanies();
    

  }

  loadCompanies() {
    this.companyService.getCompanies().subscribe((companies: Company[]) => {
      this.companies = companies;
    }, error => {
      this.alertify.error(error);
    });
  }

  // selectedChangeHandler(event: any) {
  //   this.selectedCompany = event.target.value;
  // }

}
<div class="col-12 col-md-3 col-xl-2 mt-5 bd-sidebar">
  <label for="">Select Company</label> <br>

  <select id="select" data-target="#navbarDropdown" [(ngModel)]="selectedCompany"  >
    <option value="">Select</option>
    <!-- <option *ngFor="let value of companies" value="{{value.name}}">{{value.name}}</option> -->
    <option  *ngFor="let value of companies" [ngValue]="value">{{value.name}}</option>
      </select>
</div>



<!-- <select class="form-control col-lg-8" #selectedValue name="selectedValue" id="selectedValue" [(ngModel)]="company" (ngModelChange)="assignCorporationToManage($event)">
  <option *ngFor="let value of companies" [ngValue]="company">{{value.name}}</option>
</select> -->

<ul class="list-group list-group-flush">
  <li class="list-group-item">Company name: {{selectedCompany.name}}</li>
  <li class="list-group-item">Company address: {{selectedCompany.address}}</li>
  <li class="list-group-item">Company estimated revenue: {{selectedCompany.estimatedRevenue}} </li>
</ul>

【问题讨论】:

  • 查看控制台。你一定有一些错误,因为一开始你正在循环一个未初始化的数组。
  • core.js:5871 错误类型错误:在刷新视图(core.js :11773) 在 refreshComponent (core.js:13213) 在 refreshChildComponents (core.js:11504) 在 refreshView (core.js:11825) 在 refreshDynamicEmbeddedViews (core.js:13138) 在 refreshView (core.js:11796) 在 refreshComponent (core.js:13213) 在 refreshChildComponents (core.js:11504)
  • 如何让它加载数组,然后才加载页面?

标签: html angular typescript asp.net-core bootstrap-4


【解决方案1】:

companies 数组在调用 loadCompanies() 之前已声明但未初始化。因此,最好将模板包装在 *ngIf 指令中,以确保数组在使用前被初始化。

<ng-container *ngIf="companies">
  <div class="col-12 col-md-3 col-xl-2 mt-5 bd-sidebar">
    <label for="">Select Company</label> <br>
    <select id="select" data-target="#navbarDropdown" [(ngModel)]="selectedCompany"  >
      <option value="">Select</option>
      <option  *ngFor="let value of companies" [ngValue]="value">{{value.name}}</option>
    </select>
  </div>
</ng-container>

<ng-container *ngIf="selectedCompany">
  <ul class="list-group list-group-flush">
    <li class="list-group-item">Company name: {{selectedCompany.name}}</li>
    <li class="list-group-item">Company address: {{selectedCompany.address}}</li>
    <li class="list-group-item">Company estimated revenue: {{selectedCompany.estimatedRevenue}} </li>
  </ul>
</ng-container>

【讨论】:

  • 感谢您的回答,我尝试像您写的那样输入 *ngIf,但它仍然无法正常工作
  • 尝试用[ngValue]="value.name"替换[ngValue]="value"
  • 它不会工作,因为我正在检索整个数组而不仅仅是它的实例,是的,我已经检查过
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
  • 2019-11-17
  • 1970-01-01
  • 2022-01-16
  • 2020-10-21
  • 2013-07-29
相关资源
最近更新 更多