2017-04-19 52 views
0

我正在使用angularJS ng-options組功能。我想知道有什麼辦法只顯示組名稱和apter點擊組名顯示在選擇下拉菜單中的組內容。AngularJS ng-options按功能分組,有任何方法可以顯示組名,並且在點擊組名後顯示組內容

$scope.testArry = [ 
    { 
     "name":"john", 
     "class":"Grade1" 
    },{ 
     "name":"Ann", 
     "class":"Grade1" 
    },{ 
     "name":"jery", 
     "class":"Grade2" 
    },{ 
     "name":"joy", 
     "class":"Grade2" 
    },{ 
     "name":"Pere", 
     "class":"Grade1" 
    }]; 

<select class="form-control" name="operator" ng-model="student" 
    ng-options="student as student.name group by student.class for studentin testArray"> 
    <option value="">Please Select</option> 
</select> 

這是根據class.I工作組要選擇菜單中僅顯示類,當點擊類的名稱顯示相關學生。

enter image description here

+1

你想要做的是已經提供d通過Select2。查看一些示例[這裏](https://select2.github.io/examples.html)。 – Hoa

+0

正如我在其中一條評論中提到的那樣,您想要做的事情會造成糟糕的用戶體驗。創建10個班級,每個班級有20個學生,然後在列表末尾選擇一個學生,你知道我的意思。 – Hoa

+0

@Hora我知道太多的點擊是壞的用戶體驗,但用戶請求它,這就是爲什麼我試圖實施 – Dushyantha

回答

1

這是一個複雜的情況,但我找到了解決辦法:

我認爲你可以有結構是這樣的:

 [{ 
      name: "Group 1", 
      options: [ 
      {caption: "Option 1", value: "1"}, 
      {caption: "Option 2", value: "2"} 
      ] 
     }, { 
      name: "Group 2", 
      options: [ 
      {caption: "Option 3", value: "3"}, 
      {caption: "Option 4", value: "4"} 
      ] 
     } 
     ] 

但它並不準備選擇組件,因爲我們無法綁定ng-click或標籤,也需要正確的順序。更新選項數組:

[ 
    { 
     "caption":"Group 1", 
     "type":"group", 
     "isActive":true, 
     "parentGroupSelected":false 
    }, 
    { 
     "caption":"Option 1", 
     "value":"1", 
     "type":"option", 
     "parentGroupSelected":false, 
     "parentGroup":"Group 1" 
    }, 
    { 
     "caption":"Option 2", 
     "value":"2", 
     "type":"option", 
     "parentGroupSelected":false, 
     "parentGroup":"Group 1"}, 
    { 
     "caption":"Group 2", 
     "type":"group", 
     "isActive":true, 
     "parentGroupSelected":false 
    }, 
    { 
     "caption":"Option 3", 
     "value":"3", 
     "type":"option", 
     "parentGroupSelected":true, 
     "parentGroup":"Group 2" 
    }, 
    { 
     "caption":"Option 4", 
     "value":"4", 
     "type":"option", 
     "parentGroupSelected":true, 
     "parentGroup":"Group 2" 
    }] 

模板(HMTL)

<div data-ng-controller="AppController as vm"> 

    <select data-ng-model="vm.selectModel" data-ng-change="vm.handler(vm.selectModel)"> 

     <option ng-value="item" data-ng-if="vm.checkVisibility(item)" data-ng-repeat="item in vm.optionsInline track by $index" > 
      <span>{{item.caption}}</span> 
     </option> 

    </select> 
    </div> 

我們需要兩個功能:

  1. 手柄click事件 - 事實上,我們必須把它放在平變化監聽
  2. 檢查實際選項的可見性

JS

能見度檢查功能:

vm.checkVisibility = function(option) { 

      if(option.type == 'group') { 
       return true; 
      } 

      if(option.type == 'option') { 
       if(option.parentGroupSelected == true) { 
        return true; 
       } 
      } 

      return false; 

     } 

的onClick(更改)處理器:

vm.handler = function(option) { 

      if(option.type == 'group') { 

        option.isActive = !option.isActive; 

        vm.optionsInline.forEach(function(optionItem){ 

        optionItem.parentGroupSelected = false; // accordion mode 

         if(optionItem.type == 'option') { 

          if(optionItem.parentGroup == option.caption) { 
           optionItem.parentGroupSelected = option.isActive; 
          } 

         } 

        }) 

      } 
     } 

如果你仍然有你可以參考我的jsfiddle下面的例子

的jsfiddle example問題

+0

非常感謝您的快速回復。 – Dushyantha

+0

@Lequest誰會單擊一個選擇框兩次以選擇一個值?誰會知道在複選框中選擇一個值會顯示更多的選項,如果不再擴展選擇框一次就看不到?用戶體驗在這裏很奇怪。 – Hoa

+0

@Hoa這是這個代碼的唯一問題。 – Dushyantha