2013-11-27 9 views

risposta

24

Possiamo farlo facilmente utilizzando il potente sistema di direttive angular per estendere l'html di base.

app.directive('select', function($interpolate) { 
    return { 
    restrict: 'E', 
    require: 'ngModel', 
    link: function(scope, elem, attrs, ctrl) { 
     var defaultOptionTemplate; 
     scope.defaultOptionText = attrs.defaultOption || 'Select...'; 
     defaultOptionTemplate = '<option value="" disabled selected style="display: none;">{{defaultOptionText}}</option>'; 
     elem.prepend($interpolate(defaultOptionTemplate)(scope)); 
    } 
    }; 
}); 

Con questo, possiamo ora procedere come segue:

<select ng-model="number" 
    ng-options="item.id as item.label for item in values"> 
</select> 

Questo creerà un menu a tendina con un segnaposto non selezionabile che dice "Seleziona ..."

Se vogliamo un si può semplicemente fare questo:

<select ng-model="dog" 
    ng-options="dog.id as dog.label for dog in dogs" 
    default-option="What's your favorite dog?"> 
</select> 

Questo creerà una casella di selezione con un placeh non selezionabile più vecchio che dice "Qual è il tuo cane preferito?"

Plunker Esempio (in CoffeeScript): http://plnkr.co/edit/zIs0W7AdYnHnuV21UbwK

Plunker Esempio (in javascript): http://plnkr.co/edit/6VNJ8GUWK50etjUAFfey

+0

questo non funzionerà se default-opzione è dinamica: http://plnkr.co/edit/SNMYtCcjTY5OVYup5TxX?p=preview –

+0

Certo lo fa: http://plnkr.co/edit/1nj6V2 – codevinsky

+0

No .... non lo è: http://plnkr.co/edit/q4Kbymxgw3vY6dcXQW1b?p=preview Se defaultOption viene impostato in un secondo momento, l'elemento non renderà l'opzione aggiornata. Nel mio esempio defaultOption viene impostato su "TEXT DOVREBBE ESSERE QUESTO" ma non lo vedi mai aggiornato perché lo hai già creato. –

23

Si può anche farlo direttamente nel codice HTML.

<select ng-model="number" 
      ng-options="item.id as item.label for item in values"> 
      <option value="" disabled selected style="display: none;"> Default Number </option> 
></select> 
+3

questo è il modo più elegante che abbia mai visto – Xinan

+0

Funziona magnificamente! ... e non c'è bisogno di direttive o stili disordinati ... –

Problemi correlati