Форум программистов, компьютерный форум, киберфорум
JavaScript: Angular 2, AngularJS
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
z-z
170 / 169 / 56
Регистрация: 22.06.2011
Сообщений: 980
1

Не работает orderBy после изменения атрибута элемента

11.10.2016, 19:03. Показов 814. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

У меня есть коллекция элементов, у которых есть статус.

Статус меняется так:
- при клике на определенный элемент показывается список статусов
- при клике на какой либо статус вызывается функция, в которую передается сам элемент (переменной из ng-repeat) и новый статус
- внутри функции я делаю elem.status = status;

При этом значение статуса в контроллере изменяется, но элемент попадает в начало списка, на него не действуют никакие order-ы.
Соответственно после обновления страницы (в функции я аяксом еще и в базе меняю статус) все бывает нормально - элемент встает туда, куда надо... Такое ощущение, что он из контекста вылетает.

Я сделал пробный макет маленький и там сортировка работала, но там приложение было простенькое, а в моем приложении я даже не представляю, с какого места можно начать баги искать) Подскажите, пожалуйста, в чем может быть дело?

Добавлено через 4 минуты
а, еще наблюдение... если поменять статусы у нескольких элементов, то между ними сортировка работает... то есть вот если изменить 5 элементов, то эти 5 элементов будут в начале списка, но друг относительно друга будут отсортированы правильно...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2016, 19:03
Ответы с готовыми решениями:

Не работает псевдо-класс hover в IE после изменения альфа-прозрачности элемента
Здравствуйте. Сразу к делу. На странице имеется несколько элементов, с одним и тем же классом....

Не работает Me.OrderBy
Ситуация такая: Сделал ленточную форму, на некоторые элементы которой повесил на клик...

Как работает OrderBy
функция класса public Товары SortByCena() { return a.OrderBy(q =>...

Как работает метод Enumerable.OrderBy?
using System; using System.Collections.Generic; using System.Linq; using...

7
19 / 19 / 12
Регистрация: 03.10.2016
Сообщений: 107
12.10.2016, 05:57 2
Какие order ты применяешь к ng-repeat? Если под "коллекцией" ты подразумеваешь массив, то изменение элемента массива никак вообще не меняет положение этого элемента в массиве.
Следовательно либо как то неправильно работает фильтр на repeat либо показывай функцию изменения статуса
0
z-z
170 / 169 / 56
Регистрация: 22.06.2011
Сообщений: 980
12.10.2016, 07:41  [ТС] 3
Angry_n_Hungry, верно, коллекция - массив. А положение я имею ввиду визуально, как ангуляр сортирует их внутри себя - я как то не знаю даже))

Элементы массива примерно такие:
Код
{
    name: '',
    description: '',
    status: '',
    priority: ''
}
сортирую так: |orderBy:['status', order]. По умолчанию $scope.order = "name" и может меняться select-ом.

Так вот проблема - если поменять статус элемента (как я понял, только статус, при изменении, например, имени сортировка срабатывает), то элемент перестает подчиняться общей сортировке)) Он поднимается в начало списка и сортируется только среди других "отредактированных" элементов.

Процесс изменения статуса примерно такой. Кликаю на кнопку, изменяющую статус
HTML5
1
<span ng-click="checkStatus(el, new_status)"></span>
В функции checkStatus отправляю ajax запрос на изменение статуса в БД, когда получаю ответ, просто делаю
Javascript
1
el.status = new_status;
Последнюю строку я пробовал запустить перед отправкой запроса, но никакого эффекта не было... Больше я не знаю, что придумать)
0
19 / 19 / 12
Регистрация: 03.10.2016
Сообщений: 107
12.10.2016, 09:23 4
Незнаю, у меня вот все ок вот пример https://jsfiddle.net/9bz4Lwxa/266/. Вероятно проблема в том что ты используешь в качестве статуса или в функции его меняющей. Сравнивай
0
z-z
170 / 169 / 56
Регистрация: 22.06.2011
Сообщений: 980
12.10.2016, 14:21  [ТС] 5
Angry_n_Hungry, я тоже думал, что например статус - число, а потом вставляю строку... но так поверхностно посмотрел, вроде нет в этом проблем...

а вот с функцией не могу придумать, в чем может быть проблема... я пробовал $scope.$apply() после изменения статуса. Если сразу там же писать, то выдает ошибку, ругается на какой то процесс... Видимо во время работы скрипта не может эту функцию запускать...
Пробовал засунуть этот кусок в $timeout, вообще никакой реакции) Не знаю уже, где еще искать косяк.
0
19 / 19 / 12
Регистрация: 03.10.2016
Сообщений: 107
12.10.2016, 16:01 6
Делать максимально приближенный тестовый пример
0
1453 / 845 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
13.10.2016, 13:04 7
Цитата Сообщение от z-z Посмотреть сообщение
когда получаю ответ, просто делаю
А если сразу после
Javascript
1
el.status = new_status;
вызвать не просто
Javascript
1
$scope.$apply()
а
Javascript
1
$scope.$$phase || $scope.$apply();
тоже ничего не произойдёт?
0
z-z
170 / 169 / 56
Регистрация: 22.06.2011
Сообщений: 980
13.10.2016, 17:35  [ТС] 8
LeniumSoft, нет, ничего не происходило. Но причину я все таки нашел =) Как оказалось, я не достаточно проверил... Все таки сначала значения были типа "строка", а скрипт потом ставил тип "число", поэтому так все получалось)
0
13.10.2016, 17:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2016, 17:35
Помогаю со студенческими работами здесь

Отслеживание изменения атрибута
Здравствуйте, подскажите пожалуйста функцию, или решение. Мне нужно, чтобы происходило...

Изменения атрибута в xml
Нужно найти и изментиь один елемент в xml. &lt;Task id=&quot;3&quot; status=&quot;not&quot;&gt;123123а&lt;/Task&gt; &lt;Task...

После изменения IP address на сервер, не работает 1с
После изменения IP address на сервер (Компьютер которые там установлено 1С), не работает.. Я так...

Prototype Изменения атрибута disabled у input
Здравствуйте, у меня такой вопрос. В админ панеле имеется кнопочка Добавить, а добавляется она...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru