2016-11-21 3 views
3

У меня есть следующий код для выбора выпадающего меню:Угловое 2: Выберите выпадающий не выбирая опцию, несмотря на «выбранный» атрибут

<select id="UnitOfMeasurementId" name="UnitOfMeasurementId" [(ngModel)]="UnitOfMeasurementId"> 
    <option *ngFor="let unit of UnitOfMeasurements" [ngValue]="unit.Value" [selected]="unit.Selected">{{unit.Text}}</option> 
</select> 

Каждый элемент в UnitOfMeasurements массив выглядит примерно так:

Selected: false 
Text: "lb" 
Value: "1" 

Или это:

Selected: true 
Text: "kg" 
Value: "3" 

[(ngModel)]="UnitOfMeasurementId" содержит значение т он должен быть выбран. В этом конкретном примере это значение равно 3, поэтому необходимо выбрать 3-й элемент. Разумеется, когда я проверяю элемент, он показывает ng-reflect-selected="true" на правильный элемент, но ничего не выбрано. Как я могу получить правильный элемент в списке для фактического динамического выбора вместо добавления атрибута ng-reflect-selected="true"?

+1

попробуйте использовать '[attr.selected]' вместо '[selected]' – RomanHotsiy

+1

Это также не работает. Он устанавливает selected = "true" на тот, который должен быть выбран, и "selected =" false "для всех остальных, но элемент на самом деле не выбран. Выпадающий ярлык пуст, поэтому пользователь не считает, что ничего не выбрано. – Brett

ответ

4

Не используйте атрибут selected с ngModel и ngValue, но вместо того, чтобы присвоить значение выбранного элемента в UnitOfMeasurementId.

Важно, чтобы он имел экземпляр, используемый в качестве *ngFor. Некоторые другие экземпляры объектов с одинаковыми свойствами и одинаковыми значениями не будут работать.

+0

Что это значит? ngValue передает правильное значение в UnitOfMeasurementId при выборе элемента. – Brett

+0

Конечно, но если вы хотите определить первоначально выбранный элемент, вам нужно установить 'UnitOfMesurementId' самостоятельно. Затем 'ngModel' позаботится о том, чтобы сделать правильный выбор. –

5

attr.selected привязывает значение атрибута к переданному значению. Поэтому, если вы пройдете false, он установит selected="false", который не является тем, что вы хотите получить (так как он фактически выбирает элемент в соответствии со спецификацией HTML). Чтобы удалить атрибут, вы должны пройти null.

Использование:

[attr.selected]="unit.Selected ? '' : null"

+1

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечают на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, что уменьшает читаемость кода и объяснений! – kayess

+1

@kayess , да, полностью согласны. Обновлено – RomanHotsiy

+3

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