2016-11-26 152 views
0

讓說,我有以下幾點:顯示/隱藏SELECT選項?

<select class="form-control" name="blah" ng-model="$ctrl.form.blah" ng-options="item.id as item.name group by item.etype | uppercase for item in $ctrl.opts"></select> 

現在我想的是隱藏/點擊一組按鈕,即顯示每一組我有按鈕,每一個組,當我切換點擊它,我想指定的組選項在選擇框中隱藏/顯示。

任何方式來做到這一點?


我做到了與過濾器Yatrix解釋,再加上我通過組件作爲參數的控制器上。通過這種方式,我可以訪問觸發變量,決​​定要過濾的內容。

我現在唯一的問題是,我用:

ctrl.form.select_box = ctrl.opts[0].id 

我再也不能用它來設置默認選項!任何方式來解決這個問題。


這是我結束了:

<select class="form-control" name="blah" ng-model="$ctrl.form.blah" ng-options="item.id as item.name group by item.etype | uppercase for item in $ctrl.opts | blah:$ctrl"></select> 

angular.module('myapp').filter('blah', function() { 
return function(items, ctrl) { 
    rv = []; 
    angular.forEach(items, function(item) { 
     if (ctrl.blah_f1 && item.etype == 'type1') rv.push(item); 
     if (ctrl.blah_f2 && item.etype == 'type2') rv.push(item); 
    }); 
    return rv; 
}; 
}); 

我知道這是不是直接訪問CTRL個好主意,但看不到乾淨影響過濾器的任何其他方式。 這些標誌由兩個按鈕觸發,這兩個按鈕的作用類似於無線電&複選框,即至少必須打開一個按鈕,但兩者都可以打開。 通過這種方式,用戶可以決定哪些「類型」的項目在選擇框中。

+0

不要將控制器作爲參數傳遞給過濾器。保持你的關注獨立。一個過濾器應該包含一個項目列表並對其進行過濾,然後再做其他事情。它不應該要求掌握控制器的知識。 – Yatrix

+0

你可以在小提琴中發佈你的代碼嗎?看到你在做什麼會更容易。你在這裏沒有發佈太多的代碼。 – Yatrix

回答

1

您可以使用自定義過濾器。這將在前端過濾這些項目。當您切回時,它會被添加到列表中。

.filter('myFilter', function() { 
     // items = your options 
     return function (items) { 
     var filtered = []; 

     for (var i = 0; i < items.length; i++) { 
      var item = items[i]; 

      // add a property to your model to track what's been removed 
      if (!item.removed) { 
      filtered.push(item); 
      } 
     } 

     // return all the times that haven't been removed 
     return filtered; 
     }; 
    }); 
+0

謝謝,...它必須是動態的..即我可以「切換」多次。過濾器怎麼做?不會過濾一次 – user1019129

+0

@ user1019129否,過濾器將在更新對象時更新。因此,如果您將屬性從true切換到false並返回,它將顯示這些項目或隱藏這些項目。 – Yatrix

+0

我如何將信息傳遞給過濾器?從你發佈的內容看,我沒有看到過濾器如何計算出他需要隱藏的內容。 – user1019129