2015-11-10 2 views
1

У меня есть сфера, сбрасываемая в таблицу через ng-repeat. Эти данные фильтруются 3 различными вещами, 2 выбирает и текстовое поле. Все это прекрасно работает, но мне нужно повторить, сколько результатов в таблице. Использование {{ sounds.length }} явно не работает, потому что это число до фильтрации, и фильтрация не влияет на это. поэтому я добавил переменную sound in soundsres = (sounds | filter: filters here), но делаю {{ soundsres.length }} echos вне ничего без ошибок в консоли.Угловая длина области не работает

Ниже приведен полный комплект кода. Что мне здесь не хватает. все указания (я даже проверил документы и несколько старых потоков здесь на SO), указывая, что это должно работать. Заранее спасибо.

Код:

<input type="text" ng-model="gearsearch"> 
<select ng-model="stypesearch"><option>1</option></select> 
<select ng-model="stypesearch2"><option>2</option></select> 

<span>{{ soundsres.length }}</span> 

<table ng-controller="GearController"> 
    <tr ng-repeat="sound in soundsres = (sounds | filter: gearsearch | filter: stypesearch | filter: stypesearch2)"> 
    <td>{{ sound.id }}</td> 
    <td>{{ sound.model }}</td> 
    <td>{{ sound.make }}</td> 
    <td>{{ sound.type }}</td> 
    <td>{{ sound.class }}</td> 
    <td>{{ sound.status }}</td> 
    <td>{{ sound.cost | currency }}</td> 
    </tr> 
</table> 
+0

I подумайте, что это проблема. Если вы помещаете свой 'GearController' в div над входом' gearsearch' и включаете форму и таблицу в том же div, она должна работать. – AWolf

+0

ах может быть частью проблемы. проблема заключается в том, что 'gearsearch' является глобальным полем поиска, которое фактически существует вне самого представления. вы можете использовать 'gearsearch' для фильтрации любой таблицы во всем приложении, оставив текст в поле и переключая представления, поэтому я не могу поставить' gearsearch' в тот же div, к сожалению –

+0

О, я вижу. Я напишу вам ответ. – AWolf

ответ

1

Вы можете использовать controllerAs синтаксис и добавить soundRes к вашему MainController или вы могли бы использовать $parent.soundRes добавить свой результат фильтрации в родительской области. Я думаю, что метод controllerAs более понятен, но оба будут работать.

Пожалуйста, ознакомьтесь с демонстрационной версией ниже или в этом fiddle.

(Извините за мой плохой модели данных в демо, но я не лучше. Но это нормально, чтобы показать, что длина правильно обновляется.)

angular.module('demoApp', []) 
 
\t .controller('ViewController', function() { 
 
\t \t var vm = this, 
 
     sameDate = new Date(); 
 
    
 
    sameDate.setMinutes(sameDate.getMinutes() - 5); 
 
    var dateLimit = new Date(sameDate); 
 
    
 
    var dates = [ 
 
     { 
 
      name: 'test1', 
 
     \t date: new Date(sameDate) 
 
     }, 
 
     { 
 
      name: 'test2', 
 
     \t date: new Date(sameDate) 
 
     }, 
 
     { 
 
      name: 'test3', 
 
     \t date: new Date() 
 
     }]; 
 
     
 
    vm.dates = dates; 
 
\t }) 
 
\t .controller('MainController', MainController); 
 

 
function MainController() { 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="demoApp" ng-controller="MainController as mainCtrl"> 
 
    <input ng-model="mainCtrl.searchText"/> 
 
    <select ng-model="mainCtrl.stypesearch"><option>1</option></select> 
 
    <select ng-model="mainCtrl.stypesearch2"><option>2</option></select> 
 

 
    <!--results: {{mainCtrl.filterRes.length}}--> 
 
    results: {{filterRes.length}} 
 
    <ul ng-controller="ViewController as viewCtrl"> 
 
     <li ng-repeat="date in $parent.filterRes = (viewCtrl.dates | filter:mainCtrl.searchText | filter: mainCtrl.stypesearch | filter: mainCtrl.stypesearch2)">{{date}}</li> 
 
    </ul> 
 
</div>

+0

отлично работает! на самом деле, единственное, чего я не видел в этом случае, это «$ parent.» в моем повторном запросе. изменение 'sound in soundsres = (...)' to 'sound в $ parent.soundsres = (...)' сделал трюк! Спасибо! –

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