2016-09-01 2 views
1

Использование Angular 2, RC 5, я создаю форму для создания нового объекта модели. В раскрывающемся списке показаны параметры модели. Когда я перекодирую код, в раскрывающемся списке отображается дополнительный пробел < >, хотя он фактически не создан в DOM. Это как будто есть призрак < вариант > в верхней части списка.Угловой 2, RC5 - выпадающее меню имеет дополнительную опцию «призрака»

В следующем примере я создал модель с именем Example, которая имеет параметры «id» и «name».

import {Component} from '@angular/core'; 
import {Example} from './example-model'; 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <form> 
     <h2>Dropdown</h2> 

     <select name="name" [(ngModel)]="example.name"> 
     <option [value]="">Choose one</option> 
     <option *ngFor="let option of dropdown" [value]="option.val"> 
      {{option.name}} 
     </option> 
     </select> 
    </form> 
    `, 
}) 

export class AppComponent { 
    public example: Example; 
    public dropdown: {val: number, name: string}[] = []; 

    public ngOnInit(): void { 
    this.example = new Example(); 
    this.dropdown = this._getDropdownValues(); 
    } 

    private _getDropdownValues(): {val: number, name: string}[] { 
    return [ 
     {val: 10, name: "Name #1"}, 
     {val: 20, name: "Name #2"}, 
     {val: 30, name: "Name #3"} 
    ]; 
    } 
} 

Почему я получаю призрак < вариант > в моем раскрывающемся списке?

Вы можете найти полный пример на Plunkr. Я включил предложения некоторых комментаторов о том, как исправить проблему, которая, к сожалению, тоже не работает.

ответ

0

Попробуйте присвоить значение первому варианту. То есть, изменить

<option [value]="">Choose one</option> 

к этому

<option [value]="XX">Choose one</option> 
+0

В этом случае «Выберите один» вариант должен иметь пустое значение. Как это будет работать? – ebakunin

+0

Вам необходимо назначить значение для этого, чтобы вы могли «исчезнуть». Вы бы интерпретировали это в своем коде и ассоциировали «XX» или что-то еще, что вы положили туда с пустым значением. – TheCount

0

Это время, вызванное этой линии.

<option [value]="">Choose one</option> 

Я не знаю, почему значение текста внутри тегов не отображается изначально при загрузке страницы (возможно, из-за тот случай нагрузки с указанием выбора элемента до загрузки модели?), Но вы 're-код статически записывает этот тег в select, затем динамически добавляет дополнительные теги опций из вашего списка. Если вы удалите эту строку, значение «фантом» исчезнет, ​​и если вы нажмете на нее, она отобразит предполагаемое текстовое значение.

Я думаю, что вы ищете что-то вроде этого, если вы хотите сохранить выбрать тег

<option disabled="disabled">Choose one</option> 
+0

Я пробовал ваш подход, но он, к сожалению, не работает. Есть ли у вас другие предложения? Я обновил Plunkr, чтобы показать изменение, которое вы предложили. – ebakunin

+0

Это зависит от того, что вы подразумеваете под «работой». Я указывал, откуда этот элемент, поскольку он указан в вашем коде и поэтому «ожидается». Что касается того, почему это не отображалось, мое подозрение было правильным, а пустое значение было вызвано атрибутом модели. Без этой части тега select заполненное значение отображается при загрузке. Я отредактировал ваш plunkr http://plnkr.co/edit/6enlftqXAZJrSHcVv0q1?p=preview – Dmaoc

+0

Проблема остается, когдаприкреплен к Угловой модели, в данном случае [(ngModel)] = "example.name ». Я обновил ваш plunkr, чтобы продемонстрировать: http://plnkr.co/edit/OLeuI5 – ebakunin

Смежные вопросы