Свойство 'name' не существует для типа 'any []' во время сборки ng - aot - PullRequest
1 голос
/ 16 марта 2020

У меня есть 1 выпадающий список и 1 поле ввода. На основе выбора раскрывающегося списка устанавливается значение поля ввода.

Поэтому я использовал массив типа 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

Я получаю эту ошибку

Свойство 'name' не существует для типа 'any [ ] '.

Свойство' цена 'не существует для типа' any [] '.

Как решить эту проблему

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Если вы хотите использовать объект в качестве выбранного значения, вы должны связать с [ngValue] в элементах <option>. Используйте [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];

DEMO: https://stackblitz.com/edit/angular-rg8myc

0 голосов
/ 16 марта 2020

Всегда старайтесь указывать действительный тип данных и избегайте их использования. Было бы лучше создать интерфейс и использовать его в своем коде.

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 любого типа данных. Он не может найти какую-либо информацию о типе и выдает ошибку.

...