2015-09-29 3 views
2

В этом Angular JS Pagination Fiddle exampleМожет ли app.filter быть вызван после app.controller?

var app = angular.module('myApp', ['ui.bootstrap']); 
app.filter('offset', function() { 
alert('filter is called'); 
return function(input, start) { 
    return input.slice(start); 
};}) 

app.controller('someController', function($scope) { 
alert('controller is called'); 
$scope.countries = []; 
$scope.currentPage = 1; 
$scope.itemsPerPage = 20; 
$scope.maxSize = 20; 
$scope.totalItems = 250; 

for(var i = 0; i < $scope.totalItems; i++){ 
    $scope.countries[i] = { name: 'country ' + i } 
} 
}); 

Можно ли сделать app.filter быть вызвана перед app.controller вызывается? Если да, как мы можем это сделать?

ответ

0

сперва, ваш тег не подходит. Вы можете включить Angular UI Bootstrap в зависимость от модуля, но это чисто угловой вопрос, поэтому вы можете исправить это.

Во-вторых, фильтры - это служебные функции, которые работают с некоторыми частями данных. Они выполняются при их применении. Есть несколько способов, чтобы применить их:

  1. в HTML: <div ng-repeat="item in items | myFilter> или
  2. В коде: $filter('myFilter')(arguments_to_the_filter); - обратите внимание, что вам нужно будет вводить услугу фильтра $ для этой опции.

Если вы пытаетесь фильтровать свою коллекцию до контроллера выполняет, если это маршрут, вы можете добавить resolve функции, которая впрыскивает отфильтрованное значение, или, вы можете применить фильтр первое в контроллере.

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

+0

Я действительно ценю ваше решение. Я понял все до части «разрешения». Я очень новичок в Angular Js. Как я могу применить фильтр в контроллере? – VNVN

+0

См. Https://docs.angularjs.org/api/ngRoute/provider/$routeProvider для получения дополнительной информации о функциях 'resolve'. Чтобы сделать это в своем контроллере, вы хотите использовать опцию № 2 выше. Чтобы использовать это, вам нужно будет ввести службу '$ filter' в свой контроллер. – icfantv

Смежные вопросы