2015-11-29 2 views
0

Пробовал фильтровать файл JSON по $ routeParams: id. обычно я делаю это:

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]; 
}); 

вы можете объяснить синтаксис на втором примере? особенно обозначение квадратных скобок после вызова функции? и какой подход лучше?

Thanks

+0

во втором примере должно быть: $ scope.event. my bad :) – jade

ответ

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; 

и есть только условие, чтобы проверить, так нет необходимости использовать фильтр только петли через него, если вы не можете найти Многоцелевые, фильтр вы создано.

EDIT: доступ к первому элементу пустого массива не будет бросать ошибку, но возвращает undefined

+0

Спасибо. Поэтому ставим ссылку после функции: function (element) (element) {some code} [0]; является законным? – jade

+0

, конечно, его юридический, но не правильный выбор, если он не может обеспечить элемент списка 1 в этом массиве, потому что это вызовет ошибку. если вы отделите код, который вы поймете лучше. – Fisherman

+0

Я сделал обновление, чтобы игнорировать эту ошибку, если вы используете вторую. пожалуйста, проверьте – Fisherman

0

Фильтры используются для форматирования данных, отображаемых в user.And своей основной цели форматирования данных, отображаемых в угловых шаблона , $ filter - это сервис фильтров углового модуля. Он содержит ссылки на все фильтры.

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

Здесь вы получаете фильтр по умолчанию от службы фильтра и передачи в массиве и функции итератора, который будет вызываться для каждого элемента в массиве. И $ filter ('filter') возвращает массив, который удовлетворяет условию возврата в функции итератора. Вы назначаете первый элемент фильтрованного массива в значение $ scope.template. Он может назначать неопределенный, если пустой массив возвращается фильтр

$filter('filter') (data, function(d){ 
    return d.id == eventId; 
    })[0]; 
Смежные вопросы