代码之家  ›  专栏  ›  技术社区  ›  bscott

设置角度过滤器:真不工作

  •  0
  • bscott  · 技术社区  · 9 年前

    我从数据库中提取2条数据。每个都以JSON对象数组的形式返回,存储在angular$scope变量中,如下所示:

    $scope.data =
    [{ code: 1, text: cat },
     { code: 2, text: dog },
     { code: 10, text: cow }]
    
    $scope.data2 = 
    [{ code1: 1, code2: F1, text: meow},
     { code1: 2, code2: F2, text: woof},
     { code1: 3, code2: F10, text: moo}]
    

    $scope.data 准确地说是11个对象的数组,其中 code: 每个对象的字段为1、2、3、4、5、6、7、8、10、11、12。 $scope.data2 是100个对象的数组,其中 code2: 字段可以是F1、F2、F3、F4、F5、F6、F7、F8、F10、F11、F12。

    然后我有两个html <select> 两个元素都由这两个数组填充,如下所示:

    Option 1<select data-ng-model="dataCode" data-ng-options="a.code as a.text for a in data"></select>
    Option 2<select data-ng-model="data2Code" data-ng-options="a.code1 as a.text for a in data2 
    | filter: { code2: 'F' + dataCode }"></select>
    

    我试图实现的功能是,当您从 $scope.data ,它筛选显示的项目 $scope.data2 基于代码。这个逻辑是有效的,但是它只通过子字符串进行过滤。i、 e.如果选择代码为1的cat,过滤器将返回meow和moo,因为moo的代码是F10,F1是F10的子字符串。

    我想按精确匹配进行筛选。所以我搜索了stackoverflow,发现了其他几个问题,有人问同样的问题。接受的答案基本上都是相同的:将 :true 比较器到滤波器。然而,当我试着把它改成 filter: { code2: 'F' + dataCode } : true ,过滤器匹配0个结果,我得到一个空 <选择> 下拉列表中没有选择。将其设置为false或仅移除比较器即可解决问题,但此时它不再完全匹配。

    我已尝试切换到使用 <option> 元素而不是 ngOptions 但无济于事。我想这可能和我把一个字符串和一个数字混在一起有关( 'F' + dataCode )在过滤器中,所以我尝试使用 dataCode.toString() 但这也没用。如果无法修复,有人能找出我做错了什么,或者帮我创建一个自定义过滤器吗?

    1 回复  |  直到 9 年前
        1
  •  1
  •   Sina Gh    9 年前

    如果您认为问题出在您的过滤器上,那么基于 docs ,而不是使用 true ,编写一个比较器函数并进行自己的松散比较。如果这没有导致您预期的行为,那么您的问题就在其他地方,如果没有代码的功能示例,就无法解决。