Выпадающий список Select показывает пустой, когда NG model имеет значение null

#html #angular #drop-down-menu #angular8

#HTML #угловой #выпадающее меню #angular8

Вопрос:

Я пытаюсь изменить второй выпадающий список на «Выбор по умолчанию» … » опция, когда я что-либо меняю в первом выпадающем списке. Но я продолжаю показывать мне пустое пространство, я думаю, что NG добавляет дополнительный тег Option в начале, и я не знаю почему.

Вот мой HTML

  <div>
    <select (change)="onDropChange($event.target.value)" [(ngModel)]="person.name">
  <option value='default' > Select Name</option>
  <option *ngFor="let item of list"> {{item}} </option>
</select>
</div>

<select [(ngModel)]="person.options">
  <option value='default' [selected]="!person.options"> Select Option</option>
  <option *ngFor="let item of options" value="{{item}}"> {{item}} </option>
</select>
  

Вот мой TS

 

  person= {
    person: "sam",
    options: 123
  }
  list = ["kenny", "sam", "stan"];
  options = [122,4324,234,123]

  onDropChange(value){
      this.purchaser.options = null
  }

  

код: https://stackblitz.com/edit/angular-3xo9sv?file=src/app/app.component.ts

Ответ №1:

Это потому, что у вас нет какой-либо опции с value = null , которая является значением, которому вы присваиваете this.person.options .

Вариант 1

Сделайте ваш параметр по умолчанию равным null:

 <select [(ngModel)]="person.options">
  <option [value]="null" [selected]="!person.options"> Select Option</option>
  <option *ngFor="let item of options" value="{{item}}"> {{item}} </option>
</select>
  

обратите внимание на [value]="null" . Теперь на самом деле есть опция, которая соответствует значению, которое вы ей присваиваете.

Вариант 2

Если вы не хотите, чтобы ваш параметр по умолчанию был равен null, просто убедитесь, что значение, которому вы присваиваете this.person.options , совпадает с вашим параметром по умолчанию. В коде, который вы предоставили value='default' , так что в основном вам просто нужно

 onDropChange(value){
    this.person.options = 'default';
}
  

Убедитесь, что ваш объект имеет правильные типы, поскольку прямо сейчас он объявляет его как number, поэтому у вас может возникнуть проблема. Вы можете создать свой тип, но простое / быстрое решение для устранения этой проблемы — объявить его как any .
Опять же, я предлагаю определить это лучше.

 export class AppComponent  {
    person:any = {
        name: "sam",
        options: 123
    }
    ...
}
  

Комментарии:

1. вау, спасибо за помощь. Также спасибо за то, что сделали ваш ответ исчерпывающим.