2013-11-27 10 views

Odpowiedz

24

Możemy to zrobić łatwo, stosując potężny system dyrektyw firmy Angular do rozszerzenia podstawowego html.

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

Dzięki temu możemy teraz wykonać następujące czynności:

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

To stworzy pole zaznaczania z Nie można wybrać zastępczy, który mówi „Wybierz ...”

jeśli chcemy zwyczaj zastępczy może po prostu to zrobić:

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

to stworzy pole zaznaczania z Nie można wybrać placeh starsze, które mówi "Jaki jest twój ulubiony pies?"

Plunker Przykład (w coffeescript): http://plnkr.co/edit/zIs0W7AdYnHnuV21UbwK

Plunker Przykład (w javascript): http://plnkr.co/edit/6VNJ8GUWK50etjUAFfey

+0

To nie będzie działać, jeśli domyślną opcją jest dynamiczna: http://plnkr.co/edit/SNMYtCcjTY5OVYup5TxX?p=preview –

+0

Pewnie robi: http://plnkr.co/edit/1nj6V2 – codevinsky

+0

Nie .... nie ma: http://plnkr.co/edit/q4Kbymxgw3vY6dcXQW1b?p=preview Jeśli defaultOption zostanie ustawiony później, to element nie wyrenderuje zaktualizowanej opcji. W moim przykładzie defaultOption zostaje ustawione na "TEKST POWINIEN BYĆ TAK", ale nigdy nie widzisz aktualizacji, ponieważ już ją utworzyłeś. –

23

Można również zrobić to bezpośrednio w 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

to najbardziej elegancki sposób, jaki kiedykolwiek widziałem. – Xinan

+0

Działa pięknie! ... i nie ma potrzeby niepotrzebnych dyrektyw i stylizacji ... –

Powiązane problemy