angularJs $filter javascript syntax

angularJs $filter javascript syntax

本文关键字:syntax javascript filter angularJs      更新时间:2023-09-26

尝试通过$routeParams:id过滤JSON文件。通常我这样做:

var eventId = $routeParams.eventId;
$http.get('json/events.json')
 .success(function(data){
     angular.forEach(data,function(d){
         if(d.id == eventId)$scope.event = d;
     });
}); 

找到了一些这样做的工作代码:

var eventId = $routeParams.eventId;
$http.get('json/events.json')
 .success(function(data){
    $scope.template = $filter('filter') (data, function(d){
    return d.id == eventId;
    })[0];
}); 

你能解释一下第二个例子的语法吗?尤其是函数调用后的方括号符号?哪种方法更好?

感谢

我认为第一种方法更好。$filter主要用于模板。例如,如果要使用filter在CCD_ 2指令中
在第二个示例$filter返回一个已过滤数据的数组。最后通过CCD_ 3分配第一个元素。如果筛选的数组中没有数据,这可能会导致范围错误。

要忽略该错误,您可以使用

var filteredTemplates = $filter('filter') (data, function(d){
    return d.id == eventId;
    });
   $scope.template = (filteredTemplate.length && filteredTemplate[0])|| default_template;

而且只有一个条件需要检查,所以不需要使用filter,只要循环通过它,如果你找不到你创建的filter的多用途。

EDIT:访问空数组的第一个元素不会引发错误,而是返回undefined

过滤器用于格式化显示给用户的数据。其主要目的是格式化Angular模板中显示的数据。$filter是一个角度模块的过滤服务。它包含对所有过滤器的引用。

$filter('nameOfTheFilter')(array, expression, comparator) 

在这里,您将从过滤器服务获得默认过滤器,并传入一个数组和一个迭代器函数,该函数将为数组中的每个元素调用。$filter('filter')返回一个数组,该数组满足迭代器函数中的返回条件。您正在将已筛选数组的第一个元素分配给$scope.template。如果筛选器返回空数组,它可能会分配未定义的

  $filter('filter') (data, function(d){
    return d.id == eventId;
    })[0];