当前位置: 首页 > 面试题库 >

角度过滤器正好位于对象键上

那谦
2023-03-14
问题内容

我有一个像这样的小角度应用程序:

html

<body ng-app>
  <div ng-controller="Ctrl">
    <div ng-repeat="user in users | filter:1">
      <span>{{ user.username }}, {{ user.id }}</span>
    </div>
  </div>
</body>

app.js

function Ctrl($scope) {
  $scope.users = [
    {"id":1,"username":"simon",},
    {"id":8,"username":"betty",},
    {"id":14,"username":"archie",},
    {"id":3,"username":"jumbo1"},
  ]
}

输出

simon, 1
archie, 14
jumbo1, 3

我想做的是 仅对 过滤器参数进行 完全 匹配,并且仅对id字段进行过滤。

基本上,我希望输出为:

输出

simon, 1

我正在使用Angular 1.2。


问题答案:

在Angular 1.1.3或更高版本中,可以使用以下命令:

<div ng-repeat="user in users | filter:{'id':  1}:true">

{'id': 1}说只能和现场比较id。那会让你:

simon, 1
archie, 14

:true 说“完全匹配”,结果是:

simon, 1

工作原理如下:http :
//jsfiddle.net/AM95H/

要根据值列表进行过滤 ,如果您将列表包含在作用域变量中,则将自定义过滤器添加到JS文件中:

$scope.filterValues = [1,8];
$scope.myFilter = function(value) {
   return ($scope.filterValues.indexOf(value.id) !== -1);
};

像这样使用:

<div ng-repeat="user in users |  filter: myFilter">

为了根据参数列表进行过滤, 我们将创建自己的过滤器。在这种情况下,我们将使用所有要测试的输入值调用一次,而不是每个值调用一次。

因此,我们将收到的第一个参数是输入值的数组(在您的情况下为用户),第二个参数将是我们传入的参数[[1,8])。然后,我们将创建一个输出数组,并在输入流中添加(推入)与之一匹配的所有项目filterValues。并返回输出数组。

myApp.filter('myFilter', function () {  
   return function(inputs,filterValues) {
      var output = [];
      angular.forEach(inputs, function (input) {
        if (filterValues.indexOf(input.id) !== -1)
            output.push(input);
       });
       return output;
   };
});

并像这样使用它:

<div ng-repeat="user in users |  myFilter:[1,8]">

这是一个示例:http :
//jsfiddle.net/AM95H/2/



 类似资料:
  • 问题内容: 我有一个带有一系列对象属性的对象,这些对象属性具有以下相似的结构(这是从服务返回数据的方式): 当我执行ng-repeat时,我可以遍历所有这5个对象,例如: 但是, 我真正想要做的是仅对那些不是“ foo”类型的项进行迭代 ,即3次迭代而不是5次。我知道可以以某种方式利用过滤器来执行此操作,但是我不确定如何执行。我尝试了以下方法: 但这不起作用。实际上,即使执行以下操作以将对象限制为

  • 当用户选择一个标记时,我只想显示包含该标记的博客。例如,当一个用户选择了'c''标签时,只会显示带有该标签的帖子。 我的设置如下:我有一组包含post标签的博客,其中包含标签: null 这将显示blog-thumbnail组件 下面的代码部分是我的问题所在。它不起作用: 我在这方面花了大量的时间。有人能解释我做错了什么吗?

  • 问题内容: 我想在 angularjs 1.2中 使用unsafe-html 。没有html的过滤器可以工作,而html则不能。我做的事: 我在我的html头中添加了angular-sanitize: 我的角度模块: 我的HTML: 编辑:更新为 问题答案: 已在Angular 1.2中删除。由于您正确地清理了输入内容,因此应该使用。 示例:http://plnkr.co/edit/0bHeXra

  • 我有完全合法的数据来源: 我将其显示在这样的表中: 现在假设我想过滤我的数组。如果我有固定的行数,我可以在< code>tr元素上使用< code>*ngIf来选择显示/不显示一个项目,但是Angular不允许在一个元素上有两个结构指令。 我知道我可以使用< code>Array.filter简单地过滤源数组,但是这样会产生一个副本,如果我的数组大得多,这可能会成为一个问题。 我想将该行嵌套在某个

  • 问题内容: 似乎是一个非常基本的问题,但我无法正确使用语法。 我想要的是显示id不是-1的所有问题。我究竟做错了什么。谢谢! 问题答案: 语法稍有不足,请尝试: 看到一点JSFiddle:http : //jsfiddle.net/U3pVM/3845/ 编辑: 变量示例:

  • name String extensions String[]