ng-класс не корректен при начальной загрузке страницы

Эта проблема меня давно расстраивала.

При загрузке страницы сортировка по умолчанию для таблицы устанавливается с помощью этого кода:

$scope.sort = {
     field: 'date',
     dir: 'asc'
};

Сортировка изменяется путем нажатия пользователем на заголовки таблицы, например:

<th ng-class="{'sort-desc': sorted('date', 'desc'), 'sort-asc': sorted('date', 'asc')}" class="sortable">
     <a href="#" ng-click="setSort('date')">Date</a>
</th>

Вот код setSort:

$scope.setSort = function(field) {
     if ($scope.sort.field == field)
          $scope.sort.dir = ($scope.sort.dir == 'desc') ? 'asc' : 'desc';
     else
          $scope.sort.field = field;
     $scope.update();
};

и отсортировано

$scope.sorted = function(field, dir) {
     return ($scope.sort.field == field && $scope.sort.dir == dir);
};

При начальной загрузке страницы сортировка по умолчанию (date-asc) применяется к данным в таблице, однако сортировка asc не применяется. При изменении столбца сортировки он будет отображаться нормально - это всего лишь начальная загрузка страницы.

Как я могу получить угловую оценку правильно при загрузке страницы?

1 ответ

Решение

После еще нескольких возни я разобрался с проблемой: $scope.sort определяется дважды, один раз как объект и один раз как функция.

По какой-то причине это работало однажды $scope.sort.dir а также $scope.sort.field были переопределены путем изменения сортировки, но исходные значения были перезаписаны моим определением функции.

Извлеченный урок - будьте осторожнее с именами переменных.

Другие вопросы по тегам