2015-12-17 2 views
2

Я создал выбор в таблице, которая получает некоторый адрес электронной почты из списка. Вот код:Как добавить пользовательскую опцию к выводам ng-options?

<td> 
    <select ng-init="selectedEmail = selectedEmail ? selectedEmail : emails[0]" class="form-control" ng-model="selectedEmail" ng-options="item as item.dest for item in emails"></select> 
</td> 

Я бы добавил дополнительную опцию, которая была бы настраиваемой для конечных пользователей. Если я добавить <option> в <select> его перезаписи углового ng-options

<td> 
    <select ng-init="selectedEmail = selectedEmail ? selectedEmail : emails[0]" class="form-control" ng-model="selectedEmail" ng-options="item as item.dest for item in emails"> 
     <option value="custom">Custom</option> 
    </select> 
</td> 

Как я могу добавить пользовательский вариант?

Моя цель - добавить «пользовательский» выбор для пользователей: если они выберут эту опцию, они смогут записать свой собственный выбор - собственный текст.

+1

Этот вопрос был дан ответ здесь: http://stackoverflow.com/questions/22312150/angularjs-add-a-static-option-with-ng-options –

+2

Это решение вводит пустой параметр ... – smartmouse

ответ

1

Существует несколько способов решения этой проблемы. Если вы хотите продолжить использовать ng-options, вы можете использовать функцию.

HTML

<td> 
    <select 
     ng-init="selectedEmail = selectedEmail ? selectedEmail : emails[0]" 
     class="form-control" 
     ng-model="selectedEmail" 
     ng-options="item as item.dest for item in BuildList()"></select> 
</td> 

<input type="text" placeholder="Enter Custom Option" ng-model="customText" /> 

Функция управления для BuildList

$scope.BuildList = function() { 

    if(!$scope.customText) { 
     return $scope.emails; 
    } 
    var newList = angular.copy($scope.emails); 
    newList.push({someobjectbuildUsingCustom}); 

    return newList ; 
} 
+0

Моя цель - добавить «Пользовательский» выбор для пользователей: если они выберут этот параметр, они могут записать свой собственный выбор, собственный текст (я обновил свой вопрос). – smartmouse

+0

вместо «emails» в атрибуте ng-options использует функцию «getEmails», которая возвращает другой список в зависимости от контекста. – Digix

+0

@smartmouse Я обновил свой ответ, чтобы построить список, более похожий на то, что вы ищете. Это позволит вам заказать список, но вы бы хотели – Malkus

-2

Вы можете использовать этот синтаксис:

<select> 
    <option ng-repeat="(key, value) in emails" value="{{key}}">{{value}}</option> 
    <option ... custom option ...>...</option> 
</select> 
+0

Не работает. любая ссылка на «пользовательский вариант»? – Nati

1

Вы можете сделать согласно ниже:

<div ng-controller="TestController"> 
    {{sel}} 
    <select ng-model="sel" ng-options="d.value as d.label for d in data"> 
    <option value="">any</option> 
    </select> 
</div> 

увидеть это fiddle а

+0

Кажется, это решение, но, пожалуйста, скажите мне, почему это работает. Например, если я добавляю значение 'значение', почему он показывает пустые опции? – smartmouse

+0

Если вы посмотрите на сгенерированный html, значения присваиваются параметрами ng, вы добавляете чужое значение вручную, которое мешает идентификатору, указанному ng-options, этот идентификатор является индексом в вашем массиве данных. Надеюсь, он немного разъяснит вам. – Jax

+0

Да, это понятно.Можно ли переместить дополнительный параметр в конце списка опций? – smartmouse

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