2014-09-05 3 views
0

На основе этого jsfiddle: http://jsfiddle.net/2ZzZB/56/ошибка с angularjs фильтром

я добавить раствор фильтра для моего приложения: http://www.monde-du-rat.fr/zombieReport/popup.html#/ratousearch (Ctrl: http://www.monde-du-rat.fr/zombieReport/resources/js/controllers/RatousearchCtrl.js)

//We already have a limitTo filter built-in to angular, 
//let's make a startFrom filter 
app.filter('startFrom', function() { 
    return function(input, start) { 
     start = +start; //parse to int 
     return input.slice(start); 
    } 
}); 

Смотри консоли, ошибка становится на работу:

TypeError: undefined is not a function 
    at http://www.monde-du-rat.fr/zombieReport/resources/js/baseChrome.js:368:22 
    at http://www.monde-du-rat.fr/zombieReport/resources/libs/angularjs/angular-1.3.0-rc.0/angular.min.js:180:297 
    at B.| (http://www.monde-du-rat.fr/zombieReport/resources/libs/angularjs/angular-1.3.0-rc.0/angular.min.js:169:248) 
    at B.constant (http://www.monde-du-rat.fr/zombieReport/resources/libs/angularjs/angular-1.3.0-rc.0/angular.min.js:179:161) 
    at B.| (http://www.monde-du-rat.fr/zombieReport/resources/libs/angularjs/angular-1.3.0-rc.0/angular.min.js:169:253) 
    at B.constant (http://www.monde-du-rat.fr/zombieReport/resources/libs/angularjs/angular-1.3.0-rc.0/angular.min.js:179:161) 
    at Object.c (http://www.monde-du-rat.fr/zombieReport/resources/libs/angularjs/angular-1.3.0-rc.0/angular.min.js:101:146) 
    at m.$digest (http://www.monde-du-rat.fr/zombieReport/resources/libs/angularjs/angular-1.3.0-rc.0/angular.min.js:114:386) 
    at m.$apply (http://www.monde-du-rat.fr/zombieReport/resources/libs/angularjs/angular-1.3.0-rc.0/angular.min.js:118:12) 
    at k (http://www.monde-du-rat.fr/zombieReport/resources/libs/angularjs/angular-1.3.0-rc.0/angular.min.js:76:374) 

линия

return input.slice(start); 

что не так? я не видел ошибку в примере jsfiddle


HTML:

 <div id="results" ng-show="successLordZR"> 
      <p class="myTitle">{{ 'TRS_CTRL3_TEXT1' | translate }} :</p> 
      <ul class="list-group"> 
       <li class="list-group-item" ng-repeat="post in posts | startFrom:currentPage*pageSize | limitTo:pageSize"> 
        <div class="myClearfix"> 
        <p style="float: left;"><span ng-class="{'girl' : post.sex == 'F', 'boy' : post.sex == 'M'}">#</span>&nbsp; {{post.prefixe}} {{post.name}} ({{post.idLord}})</p> 
        <p style="float: right;"><a href="http://lord-rat.org/rats/rat_details.php?id={{post.id}}" title="lien lord" ng-click="createTab('http://lord-rat.org/rats/rat_details.php?id=' + post.id, $event);"><i class="fa fa-link"></i>&nbsp;&nbsp;fiche</a></p> 
        </div> 
       </li> 
      </ul> 
      <div id="pagination"> 
       <button type="button" class="btn btn-primary btn-xs" ng-disabled="currentPage == 0" ng-click="currentPage=currentPage-1"><i class="fa fa-arrow-circle-o-left"></i>&nbsp;&nbsp;{{ 'TRS_CTRL3_PREV' | translate }}&nbsp;</button> 
       <span>&nbsp;&nbsp;&nbsp;{{currentPage+1}}/{{numberOfPages()}}&nbsp;&nbsp;&nbsp;</span> 
       <button type="button" class="btn btn-primary btn-xs" ng-disabled="currentPage >= posts.length/pageSize - 1" ng-click="currentPage=currentPage+1">&nbsp;{{ 'TRS_CTRL3_NEXT' | translate }}&nbsp;&nbsp;<i class="fa fa-arrow-circle-o-right"></i></button> 
      </div> 
     </div> 

Пример данных JSON из Laravel: http://www.monde-du-rat.fr/lordrest/public/posts_jsonforced


EDIT 2 фильтра в контроллере:

  // populate scope 
      $scope.posts = response; 
      $scope.posts = $filter('startFrom')($scope.currentPage*$scope.pageSize); 

фильтр находится здесь: http://www.monde-du-rat.fr/zombieReport/resources/js/filtersZR.js

ответ

1

кажется сообщения модель в рамках поставляется с RatousearchCtrl? В этом контроллере scope.posts изначально был установлен как пустой объект и никогда не обновлялся.

Похоже, что причина, почему размещать как в нг-повтор «пост в сообщениях» не определено, что значение получили передается фильтр startFrom.

Можете пересмотреть, как Должно быть загружено?

+0

Вы правы, у меня есть ошибка, где нет данных для заполнения сообщений, я обновляю данные сообщений с помощью var myQuery = newData.query(); Есть ли подсказка, чтобы сказать, что фильтр тихий, где нет данных, или есть ошибка моего текущего кода? – JoDiii

+0

Я отредактировал мой вопрос с новым кодом, я пытаюсь использовать фильтр непосредственно в контроллере, для управления им. вы можете попробовать «ar» в поисковом входе, потому что ошибка всегда здесь через консоль – JoDiii

+1

@JoDiii Для первого вопроса: я бы добавил проверку кода для недопустимого ввода перед обработкой, когда нет данных; и я бы использовал единичный тест для минимизации последнего. Для второго вопроса вам необходимо передать входное значение функции фильтра в контроллере, попробуйте изменить строку на '$ scope.posts = $ filter ('startFrom') ($ scope.posts, $ scope.currentPage * $ scope ,pageSize); ' –

1

Input не может существовать в тот самый момент, просто измените свой код на этот:

app.filter('startFrom', function() { 
    return function(input, start) { 
     start = +start; //parse to int 
     return (typeof input == 'string') ? input.slice(start) : ""; 
    } 
}); 
+0

сделано, но всегда ошибка – JoDiii

+1

Попробуйте мое редактирование, я не уверен, какой ввод в это время, но вам может потребоваться проверить, является ли это строкой. –

+0

Произошла ошибка, но мои данные не отображаются:/ – JoDiii

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