我有一个下拉列表和一个输入字段。根据下拉列表的选择,设置输入字段值。
所以我使用了一个any(array(类型的数组。
在我的.ts文件中,我这样写
Services: Array<any>=[
{name: 'Consultation', price: 100},
{name: 'Follow Up', price: 200},
{name: '24 Hrs. Creatinine', price: 300},
{name: 'Complete Blood Count - CBC', price: 400},
{name: 'X-Ray', price: 500}];
selectedservice = this.Services;
在HTML中,我写了这样的
<div class="col-sm-9">
<nb-select type="number" fullWidth id="service" [(ngModel)]="selectedservice"
[ngModelOptions]="{standalone: true}" required>
<nb-option *ngFor="let service of Services" [value]="service">{{service.name}} </nb-option>
</nb-select>
</div>
<div class="col-sm-9">
<input type="number" nbInput fullWidth id="price1" [disabled]="true"
value="{{selectedservice.price}}" class="form-control" />
当我运行构建命令时,ng build --aot
我收到这个错误
类型"any[]"上不存在属性"name"。
类型"any[]"上不存在属性"price"。
如何解决此
如果要使用对象作为选定值,则应绑定到<option>
元素中的[ngValue]
。当值为字符串时,请使用[value]
。
<div class="col-sm-9">
<nb-select type="number" fullWidth id="service"
[(ngModel)]="selectedservice"
[ngModelOptions]="{standalone: true}" required>
<nb-option *ngFor="let service of Services" [ngValue]="service">
{{service.name}}
</nb-option>
</nb-select>
</div>
<div class="col-sm-9">
<input *ngIf="selectedservice" type="number" nbInput fullWidth id="price1" [disabled]="true"
value="{{selectedservice.price}}" class="form-control" />
</div>
使用源数组初始化selectedservice
也是没有意义的。您应该将其设置为您的选项之一。
selectedservice = this.Services[0];
演示:https://stackblitz.com/edit/angular-rg8myc
始终尝试提供有效的数据类型,避免使用任何数据类型。最好创建一个接口并在代码中使用它。
interface ServiceInterface {
name: string;
price: number;
}
在代码中使用此接口。
Services: ServiceInterface[] = [
{name: 'Consultation', price: 100},
{name: 'Follow Up', price: 200},
{name: '24 Hrs. Creatinine', price: 300},
{name: 'Complete Blood Count - CBC', price: 400},
{name: 'X-Ray', price: 500}];
当您在*ngFor
中使用它时,您希望访问object
的属性,这意味着您假设它为object
,但在声明中,您已将它创建为任何数据类型的array
。它无法从中找到任何类型信息,并给您一个错误。