angularJs $ filter javascript语法

时间:2015-11-29 07:51:54

标签: javascript angularjs json

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

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

发现了一些执行此操作的代码:

if($('#pic').top == $('#pic1').top){
        alert("You lose");
    }

你能解释第二个例子的语法吗?函数调用后特别是方括号表示法?哪种方法更好?

由于

2 个答案:

答案 0 :(得分:1)

我认为第一种方法更适用于此目的。 $filter主要用于模板。例如,如果要使用过滤器 在ng-repeat指令中 在第二个示例中,$ filter返回过滤数据的数组。你最后通过[0]分配第一个元素。如果过滤后的数组中没有数据,这可能会导致范围错误。

忽略您可能使用的错误

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

并且只有一个条件需要检查,因此如果找不到多次使用的过滤器,则无需使用过滤器直接通过它。

编辑:访问空数组的第一个元素不会抛出错误但会返回undefined

答案 1 :(得分:0)

过滤器用于格式化显示给用户的数据。其主要目的是格式化Angular模板中显示的数据。   $ filter是angular module的过滤服务。它保存对所有过滤器的引用。

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

在这里,您将从过滤器服务获取默认过滤器,并传入一个数组和一个迭代器函数,该函数将为数组中的每个元素调用。 $ filter(' filter')返回一个数组,它满足迭代器函数中的返回条件。你将过滤后数组的第一个元素赋给$ scope.template.It如果为空则可以赋值undefined过滤器返回数组

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