2015-09-10 3 views
1

Этот вопрос несколько раз разочаровывал меня.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); 
}; 

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

Как я могу получить угловое значение для оценки на pageload?

+2

Что делает 'sorted' функция содержит? –

+0

Добавлено в сообщение body @PankajParkar –

+0

Невозможно воспроизвести проблему здесь ~ http://plnkr.co/edit/lOYj7nFZstMfuGRBR4th?p=preview ('.sort-asc' имеет розовый фон,' .sort-desc' голубой). – Phil

ответ

0

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

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

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