Angularjs ng-repeat повторять в зависимости от переменной в контроллере

0

Это частичный вид. Ng-repeat повторяет файл json, содержащий 50 записей электронной почты.

<table class="table table-hover" ng-controller="emailViewController">
    <tbody data-ng-controller="settingsController">
    <tr ng-repeat="email in emails" >
        <td><input type="checkbox" ng-checked="checkAllEmail" ng-model="selectedEmail"/>
            <a href="#">
                <span class="glyphicon glyphicon-star-empty"></span>
            </a></td>
        <td><label ng-bind="email.from"></label></td>
        <td><label ng-bind="email.subject"></label></td>
        <td><label ng-bind="email.time"></label></td>
    </tr>
    </tbody>
</table>

settingsController.js

(function() {
    'use strict';

    var settingController = function (fetchDataService, $scope, savePreferenceService, $localStorage) {
        $scope.url = 'app/mock/settings.json';
        $scope.save = {};

        fetchDataService.getContent($scope.url)
            .then(function(response){
                $scope.contacts = response.data.contacts;
                $scope.languages = response.data.languages;
                $scope.conversations = response.data.conversations;
                $scope.undoSend = response.data.undoSend;
                $scope.save = response.data.userPreferences;
            });

         $scope.setPreference = function () {
            savePreferenceService.setPreferences($scope.save.selectedLang, $scope.save.converse, $scope.save.selectedNumber, $scope.save.selectedNumberContact, $scope.save.reply, $scope.save.signature);
        }

        $scope.conversation = $localStorage.selectedNumber;
    };

    angular.module('iisEmail')
        .controller ('settingsController',
        ['fetchDataService', '$scope', 'savePreferenceService', '$localStorage', settingController]);
}());

Мне трудно понять, как получить ng-repeat для ng-repeat файла JSON в зависимости от значения $scope.conversation. Так, например, если $scope.conversation равно 10, я хочу, чтобы ng-repeat только в 10 раз. Я не хочу отображать оставшиеся 40 писем. Кто-нибудь есть идеи о том, как достичь этой функциональности?

ОБНОВИТЬ

С помощью комментария @Prashank я понял это. Вот код, использующий фильтр limitTo.

<table class="table table-hover" ng-controller="emailViewController">
    <tbody data-ng-controller="settingsController">
    <tr ng-repeat="email in emails | limitTo: conversation" >
        <td><input type="checkbox" ng-checked="checkAllEmail" ng-model="selectedEmail"/>
            <a href="#">
                <span class="glyphicon glyphicon-star-empty"></span>
            </a></td>
        <td><label ng-bind="email.from"></label></td>
        <td><label ng-bind="email.subject"></label></td>
        <td><label ng-bind="email.time"></label></td>
    </tr>
    </tbody>
</table>
Теги:
angularjs-directive

2 ответа

0
Лучший ответ

Вы можете использовать limitTo или slice и делать следующее:

вот образец,

Использование limitTo:

   <div ng-repeat="item in items | limitTo:needed">
           {{item.name}}
     </div>

ограничено до

0

Ну, есть два способа сделать это.

Более простым способом было бы использовать $ index в вашем ng-repeat, чтобы скрыть/показать элементы следующим образом:

<tr ng-repeat="email in emails" ng-hide="conversation.length() < $index">
    //same as in the question        
</tr>

То, как я это сделаю (хотя и немного длинный), использует фильтр следующим образом:

HTML:

<tr ng-repeat="email in emails | conversationFilter: conversation">
    //same as in the question        
</tr>

Фильтр:

app.filter('conversationFilter', function() {
    return function(collection, conversation) {
        return collection.slice(0, conversation);
    }
})
  • 0
    ну, похоже, это было излишним, лимит - путь ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню