Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS链式选择 {{c.id}}_Javascript_Angularjs_Loops_Model_Linked List - Fatal编程技术网

Javascript AngularJS链式选择 {{c.id}}

Javascript AngularJS链式选择 {{c.id}},javascript,angularjs,loops,model,linked-list,Javascript,Angularjs,Loops,Model,Linked List,是我的代码的样子,但它只能部分工作。如果我在ng repeat中循环,当我在选择框中单击公司时,c.id会很好地打印出来。问题是,它不会在我想要过滤结果的其他选择框中打印出来。这可能是什么原因 jsiddle:问题的原因是comp是(选定的)公司列表,而不是单个公司。当该表正常工作时(ng repeat在该表上迭代),由于comp.id的计算结果为undefined,因此过滤器将失败 这可以通过将我们的过滤器更改为以下方式来解决: <select multiple ng-model="co

是我的代码的样子,但它只能部分工作。如果我在
ng repeat
中循环,当我在选择框中单击公司时,
c.id
会很好地打印出来。问题是,它不会在我想要过滤结果的其他选择框中打印出来。这可能是什么原因


jsiddle:

问题的原因是
comp
是(选定的)公司列表,而不是单个公司。当该表正常工作时(ng repeat在该表上迭代),由于
comp.id
的计算结果为
undefined
,因此过滤器将失败

这可以通过将我们的过滤器更改为以下方式来解决:

<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>

你能用小提琴演示一下吗?在这里取模板:@MaximShoustin好了,开始吧
<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>
$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;
    }
};