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
были переопределены путем изменения сортировки, но исходные значения были перезаписаны моим определением функции.
Извлеченный урок - будьте осторожнее с именами переменных.