2014-10-15 3 views

ответ

90

Существует вариант allow-clear для Ui-Select-матч, который делает вещь для вас, у вас будет x справа, и вы можете очистить его, щелкнув по нему. https://github.com/angular-ui/ui-select/wiki/ui-select-match

Быстрый пример:

<ui-select-match allow-clear="true" placeholder="Select or search a country in the list..."> 
    <span>{{$select.selected.name}}</span> 
</ui-select-match> 

Рабочий пример: http://plnkr.co/edit/DbbUE68QlNLjx97pBZ56?p=preview

+9

Это должен быть принятый ответ. –

+2

Знаете ли вы, как получить это событие, нажав кнопку очистки «x»? Это помогло бы мне сбросить зависимые поля. –

+0

Хотя это очевидно в документации, это довольно раздражает то, что вы можете использовать только логическое, но без обратного вызова для параметров разрешающей проверки ... Так что это довольно бесполезно для запуска обратного вызова и сделать что-то с соответствующими данными. – burzum

29

Вы можете добавить небольшую кнопку X при отображении выбора.

<ui-select-match placeholder="Select or search a country in the list..."> 
    <span>{{$select.selected.name}}</span> 
    <button class="clear" ng-click="clear($event)">X</button> 
</ui-select-match> 

Затем вы останавливаете событие click от пузырьков и запускаете событие open. И вы очищаете поле, перезаписывая выбранную модель.

$scope.clear = function($event) { 
    $event.stopPropagation(); 
    $scope.country.selected = undefined; 
}; 

Это plnkr. http://plnkr.co/edit/qY7MbR

+1

@ решение exiadbq предлагает те же функции, более простым способом. – Jocelyn

+3

Да, это работает - однако я бы просто хотел добавить, теперь есть встроенная функция, поэтому вам не нужно добавлять дополнительный контроллер к контроллеру. Вы можете просто использовать «ng-click =» $ select.clear ($ event) », и это будет отлично работать;) Это также происходит путем обновления рендеринга и обратных вызовов. –

6

Если вы используете бутстрап, с точки зрения дизайна, вы также можете использовать значок fa-remove.

Кроме того, с точки зрения удобства использования вы можете выровнять значок удаления слева.

JS:

<ui-select-match placeholder="Select or find..."> 
    <button class="clear-btn" ng-click="clear($event)"> 
     <span class="fa fa-remove"></span> 
    </button> 
    <span class="clear-btn-offset">{{$select.selected}}</span> 
</ui-select-match> 

CSS-:

.select2 .clear-btn { 
    background: none; 
    border: none; 
    cursor: pointer; 
    padding: 5px 10px; 
    position: absolute; 
    left: -2px; 
    top: 1px; 
} 

.clear-btn-offset { 
    position: absolute; 
    left: 25px; 
} 

В коде директивы:

$scope.clear = function($event) { 
    $event.stopPropagation(); 
    // Replace the following line with the proper variable 
    $scope.country.selected = undefined; 
}; 
+0

Это действительно приятное решение Игоря. Большое спасибо. Этот способ выглядит лучше, чем предложенный Nic128. Я только изменил CSS на '.select2 .clear-btn', потому что я хотел видеть ** X ** вправо, и я заменил' left: -2px; 'для' right: 20px; '. Мне не нужно было использовать '.clear-btn-offset' вообще. – sebadagostino

+0

Конечно, вы все равно можете использовать то, что упоминалось в @exiadbq, но лично я не вижу, поскольку структура элемента и визуальный стиль действительно лучше с явной кнопкой. –

0

Примечание: если используется тегирование и мечения-метка = "ложных" в этом случае позволяют чистой функциональности не работают.

Пользовательские ясно функциональность

HTML код

<ui-select-match placeholder=”Enter table…”> 
<span>{{$select.selected.description || $select.search}}</span> 
<a class=”btn btn-xs btn-link pull-right” ng-click=”clear($event, $select)”><i class=”glyphicon glyphicon-remove”></i></a> 
</ui-select-match> 

контроллера Код действия

function clear($event, $select){ 
//stops click event bubbling 
$event.stopPropagation(); 
//to allow empty field, in order to force a selection remove the following line 
$select.selected = undefined; 
//reset search query 
$select.search = undefined; 
//focus and open dropdown 
$select.activate(); 
} 
Смежные вопросы