2013-11-27 6 views

答えて

24

angleの強力な指示システムを使用して基本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)); 
    } 
    }; 
}); 

、我々は今、行うことができます以下:

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

これは「選択...」

を私たちが望む場合は言う選択不可能なプレースホルダを選択ボックスを作成します。カスタムプレースホルダは、これを簡単に行うことができます:

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

これは選択できない場所で選択ボックスを作成しますあなたの好きな犬は何ですか?

(CoffeeScriptの中)Plunker例:http://plnkr.co/edit/zIs0W7AdYnHnuV21UbwK

Plunker例(JavaScriptで):また、HTMLで直接それを行うことができますhttp://plnkr.co/edit/6VNJ8GUWK50etjUAFfey

+0

デフォルト・オプションは動的である場合、これは動作しません:http://plnkr.co/edit/SNMYtCcjTY5OVYup5TxX?p=previewを –

+0

それがない確か:http://plnkr.co/edit/1nj6V2 – codevinsky

+0

ありません....それはしません:http://plnkr.co/edit/q4Kbymxgw3vY6dcXQW1b?p=preview defaultOptionが後で設定されると、要素は更新されたオプションをレンダリングしません。私の例では、defaultOptionは "TEXT SHOULD BE THIS"に設定されていますが、既に作成しているため、更新は見られません。 –

23

<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

これは私が見た中で最もエレガントな方法です – Xinan

+0

美しく動作します! ...と乱雑な指示やスタイリングの必要はありません... –

関連する問題