尝试通过$ 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");
}
你能解释第二个例子的语法吗?函数调用后特别是方括号表示法?哪种方法更好?
由于
答案 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];