Javascript 角网格中的动态选择元素滤波

Javascript 角网格中的动态选择元素滤波,javascript,angularjs,breeze,Javascript,Angularjs,Breeze,我正在使用ng repeat对对象进行迭代,以便以角度显示,每个对象都包含一个包含对象属性的select元素 我想根据每个对象的其他属性的选定值筛选选项(这比我想象的要难解释),但问题是这些是微风实体,如果我使用传统方法,堆栈会由于微风实体的循环性质引发溢出异常 我发现Ward提供了一个很好的示例,介绍了如何创建一个更静态的函数来处理过滤,但我正在尝试使其更具动态性,并且正在努力- 在视图中,我有一个可用战斗机的列表,该列表应通过战斗机的重量等级进行过滤,因此对于ng repeat的每一场战斗,

我正在使用ng repeat对对象进行迭代,以便以角度显示,每个对象都包含一个包含对象属性的select元素

我想根据每个对象的其他属性的选定值筛选选项(这比我想象的要难解释),但问题是这些是微风实体,如果我使用传统方法,堆栈会由于微风实体的循环性质引发溢出异常

我发现Ward提供了一个很好的示例,介绍了如何创建一个更静态的函数来处理过滤,但我正在尝试使其更具动态性,并且正在努力-

在视图中,我有一个可用战斗机的列表,该列表应通过战斗机的重量等级进行过滤,因此对于ng repeat的每一场战斗,都有一个重量等级选择器和两个战斗机选择器-

尝试1-

<select
    ng-model="fight.firstFighter"
    ng-options="f.fullName for f in fighters | filter: fighterFilter">
</select>

<select
    ng-model="fight.weightClass"
    ng-options="w.fullName for w in weightClasses">
</select>

$scope.fighterFilter = function (fighter) {
    var fight = ???;
    return fight.weightClass ?
        -1 != fighter.weightClass === fight.weightClass :
        true;
};

$scope.fighterFilter=功能(战斗机){
var=???;
回击,重量级?
-1!=fighter.weightClass==fight.weightClass:
是的;
};
我尝试过不发送任何内容,如图所示,但问题是它在遍历每个可用的战斗机时只发送战斗机的值,因此我无法获得fight.weightClass的值

你知道如何了解战斗的背景和我反复提到的战士吗?还是一种更好的过滤方法

战斗机结构

  • 斗士

    • 身份证
    • 名字
    • 重量分类
    • WeightClass(导航属性)
  • 搏斗

    • 第一战斗机
    • 第二战斗机
    • 重量分类
    • WeightClass(导航属性)
  • 重量级

    • 身份证
    • 重量
    • 描述
    • 全名
  • 编辑


    我已经能够毫无问题地过滤s单次战斗的结果,问题是如何在ng repeat指令下的相同视图中动态处理每次战斗的结果。我无法获得“fight”和“fighter”的上下文来比较这两个实体的“weight class”值是否匹配

    过滤器可以将
    表达式
    作为
    对象
    ,格式为
    {fieldName:value}

    您可以使用
    | filter:{WeightClassId:fight.WeightClass.Id}
    实现您想要的功能

    <li ng-repeat="fight in fights">
        <h4>{{ fight.number }}</h4>
    
        Weight Class:
        <select ng-model="fight.WeightClass" ng-options="w.Name for w in weightClasses"></select>{{ fight.WeightClass.Name }}
    
        <br/>First Fighter
        <select ng-model="fight.FirstFighterId" ng-options="f.Name for f in fighters | filter: {WeightClassId:fight.WeightClass.Id}"></select><span>{{ fight.FirstFighter.Name }}</span>
    
        <br/>Second Fighter
        <select ng-model="fight.SecondFighterId" ng-options="f.Name for f in fighters| filter: {WeightClassId:fight.WeightClass.Id}"></select><span>{{ fight.SecondFighter.Name }}</span>
    </li>
    
  • {{fight.number} 重量等级: {{fight.WeightClass.Name}
    第一架战斗机 {{fight.FirstFighter.Name}
    第二架战斗机 {{fight.SecondFighter.Name}

  • 你能发布
    战斗机的数据结构吗?
    这不会动态工作,这是假设每页上只有一场战斗,而事实上有多场,这就是我使用ng repeat的原因。正确吗?所以在我的尝试1中,当我静态设置fihgt.weightClass时,我可以很容易地让它工作,正如我提到的,问题是无论我做什么,我都无法获得战斗的价值。我想看看,根据你的答案填充的战斗机选择列表,范围是否有变化,但我看不到战斗机是动态填充的。你能发布我的fiddle代码的更新版本吗?猜你的代码真的很难。我已经在这把小提琴上添加了基本结构——但问题显然比小提琴显示的更深入。很酷,这让我通过一点按摩找到了答案。谢谢ID只是用于演示,因为我不想编写自定义的getter和setter,如果你删除标记中的所有“ID”,那么答案是100%正确的,应该可以帮助未来的访问者找到最终答案。再次感谢。