AngularJS:Filter Too Lax - 显示不正确

时间:2014-06-03 08:03:16

标签: angularjs

我有一个从SharePoint自定义列表返回的附件对象,每个附件都命名为ProjectID | RequestID | TaskID |文件名。

我正在尝试根据我的需要进行过滤(只有1个ID将与文件名一起出现,其余的通常为0,除非共享正在进行)但是当我过滤PID(项目ID)== 1时,它显示PID为1和17的位置。如何将过滤器拧紧以匹配EXACT?

这是plunkr

这是我的HTML:

<body ng-controller="MainCtrl">
    <h3>All Attachments:</h3>
    <ul>
      <li ng-repeat="att in attachments">{{att.Title}}</li>
    </ul>
    <hr />
    <h3>Attachments for Project #1</h3>
    <ul>
      <li ng-repeat="pat in fstProj = (attachments | filter:{PID:'1'})">{{pat.Title}}</li>
    </ul>
  </body>

这是Javascript:

var app = angular.module('app', []);

app.controller('MainCtrl', function($scope, catFactory) {

  $scope.attachments = catFactory.getAttachments();


});

1 个答案:

答案 0 :(得分:0)

filter过滤器使用字符串匹配。你想比较确切的数字,你可以通过用户定义的函数进行过滤:

<li ng-repeat="pat in attachments | filter:byPID">{{pat.Title}}</li>

$scope.byPID = function (item) {
    return item.PID === 1;
}

另请参阅此 short demo


<强>更新

当然,如果你愿意使用更新版本的Angular(不是来自1.0。*分支)(你绝对应该),那么第三个参数将被传递给filter,为了进行严格匹配(而不是子字符串):

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js" ...>
...
<li ng-repeat="pat in attachments | filter:{PID:1}:true">{{pat.Title}}</li>

在这种情况下,不需要改变任何其他内容。

另请参阅此 other demo