2014-10-15 15 views

risposta

90

C'è un'opzione allow-clear per ui-select-match che fa la cosa per te, avrai la x sulla destra e puoi cancellarla cliccando su di essa. https://github.com/angular-ui/ui-select/wiki/ui-select-match

esempio rapida:

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

esempio di lavoro: http://plnkr.co/edit/DbbUE68QlNLjx97pBZ56?p=preview

+9

Questa dovrebbe essere la risposta accettata. –

+2

Sapete come ottenere quell'evento facendo clic sul pulsante "x" per consentire la cancellazione? Mi aiuterebbe a resettare i campi dipendenti –

+0

Mentre questo è ovvio nella documentazione è piuttosto fastidioso che tu possa usare solo un booleano ma non richiamare per le opzioni allow-clear ... Quindi questo è praticamente inutile per attivare un callback e fare qualcosa con i dati relativi. – burzum

29

È possibile aggiungere un piccolo tasto X quando si visualizza la selezione.

<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> 

Quindi si interrompe l'evento di clic dall'effervescenza e si attiva l'evento aperto. E si cancella il campo sovrascrivendo il modello selezionato.

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

Ecco il plnkr. http://plnkr.co/edit/qY7MbR

+1

@ soluzione exiadbq offre la stessa funzione in modo più semplice. – Jocelyn

+3

Sì, questo funziona-- tuttavia, vorrei solo aggiungere, ora c'è una funzione built-in in modo da non dover aggiungere un ulteriore metodo al controller. Puoi semplicemente usare 'ng-click =" $ select.clear ($ event) "' e funzionerebbe benissimo;) Questo anche attraverso l'aggiornamento di rendering e callback. –

6

Se si utilizza il bootstrap, dal punto di vista del progetto, è possibile utilizzare anche un'icona di rimozione.

Inoltre, dal punto di vista dell'usabilità, è possibile allineare l'icona di rimozione a sinistra.

Il 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> 

Il 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; 
} 

sul codice direttiva:

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

Questa è davvero una bella soluzione Igor. Grazie mille. In questo modo sembra migliore di quella suggerita da Nic128. Ho solo modificato il CSS su '.select2 .clear-btn' perché volevo vedere il ** X ** a destra e ho sostituito' left: -2px; 'per' right: 20px; '. Non ho bisogno di usare '.clear-btn-offset' affatto. – sebadagostino

+0

Ovviamente si può ancora usare ciò che @exiadbq ha menzionato, ma io personalmente non lo uso poiché la struttura dell'elemento e lo stile visivo sono davvero migliori con il pulsante esplicito. –

0

Nota: se abbiamo usato il tagging e tagging-label = "false" in quel caso allow-chiaro la funzionalità non funziona.

funzionalità personalizzate chiaro

codice 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> 

controller Codice azione

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(); 
}