2016-12-28 8 views
3

角度材質選択ワークを角形選択のようにしたい。私はそれのいくつかを動作させましたが、1つの違いがあります。角度選択は、彼のモデルで彼のリストにないオブジェクトを持つことができます。角度材選択が角度のように動作するようにする

Fiddle for better understanding

<ui-select ng-model="current_item" name="emitter" autocomplete="off" theme="select2" style="max-width:385px;"> 
    <ui-select-match placeholder="Select Item" title="{{$select.selected.name}}">{{$select.selected.name}}</ui-select-match> 
    <ui-select-choices repeat="item in list" refresh="refresh($select.search)" refresh-delay="0"> 
      <small>{{item.name}}</small> 
    </ui-select-choices> 
</ui-select> 

あなたが見ることができるように、角度のUI選択がNGモデルTEST4でさえ厳しいです、それはリストに載っていないですが、それはまさに私が選択した角度材料に必要な動作です。それを行う方法はありますか、私は角度uiを選択して立ち往生ですか?

+1

技術的に 'test4'は' ui-select'のように見えますが、リストにはありません。オプションリストにないモデルオブジェクトを追加できますか? '$ scope.list = {{name:" test1 "}、{name:" test2 "}、{name:" test3 "}、$ scope.current_item];あるいはジェネリック指令が必要です。 – bhantol

答えて

1

下記のようなものを試してみてください。

mdOptionディレクティブをデコレートし、ngModelをmd-optionのngRepeatのコレクションに追加します。

fiddle solution with test4 showing as an option

myApp.directive('mdOption',function(){ 
    return { 
    restrict: 'E', 
    priority: 0, 
    require: [ '^^mdSelect', '^^ngModel'], 
    link: function(scope, ele, attr, ctrls) { 
     var repeatExpr = attr.ngRepeat; 
     var optionsModelStr = repeatExpr.match(/[ ]+in+[ ]+(.*?)([ \|]+)/)[1]; 
     var list = scope[optionsModelStr]; 
     var select = ctrls[0]; 
     var ngModel = ctrls[1]; 
     if (ngModel.$modelValue && list.indexOf(ngModel.$modelValue) < 0) { 
      list.push(ngModel.$modelValue); 
     } 

    } 
    } 
}); 

これは、生産準備、コードちょうど考えではありません。

編集::少しでもうまくいきましたが、私はリストを手に入れた直後に$scope.list.unshift($scope.current_item);と簡単に行くことにしました。私はもっ​​とシンプルだと思う=)

+0

あなたの提案をありがとう、私はあなたの最初のアイデア、あなたが私の質問でコメントしたものと一緒に行った。リストを取得したら、$ scope.list.unshift($ scope.current_item);を実行します。私はもっ​​とシンプルだと思う=) –

関連する問題