2013-12-09 201 views
0
<select multiple ng-model="comp" ng-options="c.name for c in companies | unique: 'company'" style="width: 100%; height: 200px; float: left; margin-bottom: 20px"></select> 

<table> 
    <tr ng-repeat="c in comp"> 
    <td>{{ c.id }}</td> 
    </tr> 
</table> 

<select multiple ng-model="dep" ng-options="c.name for c in departments | filter: {company_id: comp.id}" style="width: 100%; height: 200px; float: left; margin-bottom: 20px"></select> 
<select multiple ng-model="pos" ng-options="c.name for c in positions | unique: 'position' | filter: {department_id: dep.id}" style="width: 100%; height: 200px; float: left"></select> 

是我的代碼的樣子,但它只能部分工作。如果我通過ng-repeat循環播放,則當我在選擇框中單擊公司時,c.id將打印出正常。麻煩的是 - 它不會在我想要過濾結果的其他選擇框中打印出來。這可能是什麼原因?AngularJS鏈接選擇

的jsfiddle:http://jsfiddle.net/9Ymvt/853/

+0

你可以在小提琴中演示它嗎?採取模板在這裏:http://jsfiddle.net/9Ymvt/852/ –

+0

@MaximShoustin確定在這裏去http://jsfiddle.net/9Ymvt/853/ – Xeen

回答

0

問題是由一個事實,即comp是(選擇)公司,而不是一個單一的公司的名單引起的。雖然表格工作正常(ng-repeat迭代遍歷表格),但由於comp.id的計算結果爲undefined,因此過濾器失敗。

這可以通過改變我們的過濾器是如下解決:

<div ng-controller="fessCntrl"> 
    <select multiple ng-model="comp" ng-options="c.name for c in companies | unique: 'company'" style="width: 100%; height: 200px; float: left; margin-bottom: 20px"></select> 
    <table> 
     <tr ng-repeat="c in comp"> 
      <td>{{ c.id }}</td> 
     </tr> 
    </table> 
    <pre>{{ comp }}</pre> 
    <select multiple ng-model="dep" ng-options="c.name for c in departments | filter:sameId(comp, 'company_id')" style="width: 100%; height: 200px; float: left; margin-bottom: 20px"></select> 
    <select multiple ng-model="pos" 
     ng-options="c.name for c in positions | unique: 'position' | filter:sameId(dep, 'department_id')"     
     style="width: 100%; height: 200px; float: left"></select> 
</div> 

的代碼工作,sameId,必須對fessCntrl範圍限定。

$scope.sameId = function(grouping, object_id_field_name) { 
    return function(object) { 
     var obj_id = object[object_id_field_name]; 
     for (var i = 0; i < grouping.length; i++) { 
      if (grouping[i].id == obj_id) 
       return true; 
     } 
     return false; 
    } 
};