--- Я знаю, что этот ответ не для этого вопроса, но я хочу, чтобы люди, которые читают этот вопрос, хотят обращаться с такими сервисами, как заводы, чтобы избежать неприятностей, делая это ----
Для этого вам нужно будет использовать Сервис или Фабрику.
Службы - это ЛУЧШАЯ ПРАКТИКА для обмена данными между не вложенными контроллерами.
Очень очень хорошо аннотация по этой теме о совместном использовании данных - это объявление объектов. Мне не повезло, потому что я упал в ловушку AngularJS, прежде чем прочитал об этом, и я был очень расстроен. Так что позвольте мне помочь вам избежать этой проблемы.
Я прочитал из «ng-book: Полная книга по AngularJS», что AngularJS ng-модели, созданные в контроллерах как голые данные, являются WRONG!
Элемент области $ A должен быть создан следующим образом:
angular.module('myApp', [])
.controller('SomeCtrl', function($scope) {
// best practice, always use a model
$scope.someModel = {
someValue: 'hello computer'
});
И не так:
angular.module('myApp', [])
.controller('SomeCtrl', function($scope) {
// anti-pattern, bare value
$scope.someBareValue = 'hello computer';
};
});
Это потому, что оно рекомендовано (ЛУЧШАЯ ПРАКТИКА) для DOM (html document), чтобы содержать вызовы как
<div ng-model="someModel.someValue"></div> //NOTICE THE DOT.
Это очень полезно для вложенных контроллеров, если вы хотите, чтобы ваш дочерний контроллер мог изменять объект с родительского контроллера ....
Но в вашем случае вы не хотите вложенных областей, но есть аналогичный аспект для получения объектов от служб к контроллерам.
Допустим, у вас есть ваш сервис «Factory», и в обратном пространстве есть объект A, который содержит объект B, который содержит objectC.
Если с вашего контроллера вы хотите ПОЛУЧИТЬ objectC в своей области, это ошибка, чтобы сказать:
$scope.neededObjectInController = Factory.objectA.objectB.objectC;
Это не работает ... Вместо этого используйте только одну точку.
$scope.neededObjectInController = Factory.ObjectA;
Тогда , в DOM вы можете вызывать objectC из объекта A. Это наилучшая практика, связанная с заводами, и, что самое важное, это поможет избежать неожиданных и неустранимых ошибок.
Так как я главным образом столкнулся с этим с Django, я нашел это решение быть самым осуществимым. Кажется, что нет никакого "правильного пути", чтобы сделать это в реляционной базе данных.
Просто мысль, рассматривая опция № 1 по сравнению с № 3 : разве расположенное с интервалами не выстраивает опцию (#3), только откладывают проблему нормального массива (#1)? Безотносительно алгоритма Вы выбираете, или он повреждается, и Вы столкнетесь с проблемами с № 3 позже, или он работает, и затем № 1 должен работать точно также.
Другая альтернатива была бы (если Ваш RDBMS поддерживает ее) использовать столбцы массива типа. В то время как это повреждает правила нормализации, это может быть полезно в таких ситуациях. Одна база данных, которую я знаю об этом, имеет массивы, PostgreSQL.
Я сделал это в моем последнем проекте, но именно для таблицы только иногда должно было конкретно заказываться и не получалось доступ слишком часто. Я думаю, что расположенный с интервалами массив был бы наилучшим вариантом, потому что это переупорядочение будет самым дешевым в среднем случае, просто включив изменение в одном значении и запросе на два).
кроме того, я предположил бы, что ORDER BY будет довольно в большой степени оптимизирован поставщиками базы данных, так усиление той функции было бы выгодно для производительности в противоположность реализации связанного списка.
Используйте число с плавающей точкой для представления положения каждого объекта:
Объект 1-> 0.0
Объект 2-> 1.0
Объект 3-> 2.0
Объект 4-> 3.0
можно поместить любой объект между любыми другими двумя объектами простым делением пополам:
Объект 1-> 0.0
Объект 4-> 0.5
Объект 2-> 1.0
Объект 3-> 2.0
(Перемещенный объект 4 между объектами 1 и 2).
процесс деления пополам может продолжиться почти неограниченно долго из-за способа, которым числа с плавающей точкой кодируются в компьютерной системе.
Объект 4-> 0.5
Объект 1-> 0.75
Объект 2-> 1.0
Объект 3-> 2.0
(Перемещают объект 1 в положение сразу после Объекта 4)
Если объекты в большой степени не включаются другими таблицами, и списки коротки, удаление всего в домене и просто повторно вставив корректный список является самым легким. Но это не практично, если списки являются большими, и у Вас есть много ограничений для замедления удаления. Я думаю, что Ваш первый метод является действительно самым чистым. При выполнении его в транзакции, можно быть уверены, что ничего нечетного не происходит, в то время как Вы посреди обновления для завинчивания порядка.
acts_as_list, смешивающийся в направляющих, обрабатывает это в основном способ, которым Вы обрисовали в общих чертах в № 1. Это ищет столбец INTEGER, названный положением (которых можно переопределить для именования, конечно), и использование, что, чтобы сделать ORDER BY. Когда Вы хотите переупорядочить вещи, Вы обновляете положения. Это служило мне очень хорошо каждый раз, когда я использовал его.
Как примечание стороны, можно устранить необходимость всегда сделать, менять местоположение на ВСТАВЛЯЕТ/УДАЛЯЕТ при помощи редкой нумерации - отчасти как основная спина в день... можно пронумеровать положения 10, 20, 30, и т.д. и если необходимо вставить что-то промежуточные 10, и 20 Вы просто вставляете его с положением 15. Аналогично, когда удаление Вас может просто удалить строку и оставить разрыв. Только необходимо сделать изменение нумерации при фактическом изменении порядка или при попытке сделать вставку и нет никакого соответствующего разрыва для вставки в.
, Конечно, в зависимости от Вашей конкретной ситуации (например, есть ли у Вас другие строки, уже загруженные в память или не) она может или не может иметь смысла использовать подход разрыва.
Я сделал бы последовательное число с триггером на таблице, которая "создает место" для приоритета, если это уже существует.
У меня была эта проблема также. Я находился под тяжелой нехваткой времени (не все мы), и я пошел с опцией № 1 и только обновил строки, которые изменились.
при свопинге объекта 1 с объектом 10, просто сделайте два обновления для обновления номеров заказа объекта 1 и объекта 10. Я знаю, что это алгоритмически просто, и это - O (n) худший случай, но что худший случай - когда у Вас есть общая перестановка списка. Как часто это собирается произойти? Это - чтобы Вы ответили.