Как заменить угловое местоположение без обновления контроллера?

Предположим, у меня есть приложение Angular для редактирования открыток.При создании новой eCard используется путь типа ---- +: = 0 =: + ----, а при редактировании существующей eCard используется путь типа ---- +: = 1 =: + ---- .Система вкладок позволяет нам одновременно открывать несколько открыток для редактирования.Нам нужна функция автосохранения, подобная той, которую пользователи ожидают, например, от современной веб-почты или программного обеспечения вики (или самого StackOverflow).Мы не хотим сохранять черновик электронной открытки в тот момент, когда пользователь открывает форму «Создать», которая дает нам много черновиков пустых открыток, поэтому мы начинаем автосохранение, когда пользователь начинает печатать.Я хотел бы написать такой код в нашем контроллере (он упрощен, чтобы не включать, например, обработку ошибок или остановку автосохранения при закрытии вкладки и т. Д.):Приведенный выше код отлично работает, за исключением одного: при изменении местоположения наш контроллер перезагружается и представление обновляется.Поэтому, если пользователь находится в процессе ввода, когда автосохранение завершается, появляется кратковременное мерцание, и он теряет свое место.Я рассмотрел несколько подходов к решению этой проблемы:1) Измените путь, чтобы использовать путь поиска и установите ---- +: = 3 =: + ---- на ---- +: = 4 =: + ---- в ---- +: = 5 =: + ---- конфигурация.Таким образом, путь изменится с ---- +: = 6 =: + ---- на, например, ---- +: = 7 =: + ---- и, таким образом, не приведет к принудительной перезагрузке.Проблема в том, что у меня может быть открыто несколько открыток, и я хочу изменить, например, ---- +: = 8 =: + ---- на ---- +: = 9 =: + ---- для запускаизменение маршрута и перезагрузка контроллера.Так что на самом деле это невозможно.2) Не трудитесь редактировать URL-адрес, и в этом случае кнопка "Назад" ведет себя странно.Это заманчиво, но если пользователь открывает свой список существующих электронных карт и пытается открыть конкретную сохраненную электронную карту, мы хотим, чтобы система вкладок распознавала, что она должна просто отображать текущую существующую вкладку, а не открывать новую вкладку.Теоретически мы могли бы решить эту проблему, обновив нашу систему табуляции, чтобы она стала умнее;вместо того, чтобы просто проверять путь, он может проверять как путь, так и постоянный идентификатор, который мы могли бы где-то сохранить.Это сделало бы систему табуляции значительно более сложной, и это кажется излишним для этой функции.3) Изменяйте URL-адрес только тогда, когда пользователь не занимается активным редактированием, например, напишите функцию ---- +: = 10 =: + ----, которая возвращает ---- +: = 11 =: + ----если с момента внесения пользователем каких-либо изменений прошло не менее 10 секунд, обновите путь на основе этого.Упрощенная версия этого будет выглядеть примерно так:В итоге я выбрал вариант №3;это было значительно проще, чем вариант №2, но намного сложнее реализовать и протестировать, чем я бы хотел, особенно если учесть крайние случаи, такие как «что, если вкладка больше не является активной при срабатывании этого тайм-аута?»Я бы хотел, чтобы вариант №4 был возможен.4) Выйдите за пределы Angular, чтобы отредактировать текущее местоположение и историю, если это необходимо и возможно.Это было бы моим предпочтительным решением, но мои исследования показывают, что небезопасно /рекомендуется пытаться обойти службу ---- +: = 13 =: + ---- для изменения вашего пути или истории редактирования.Есть ли безопасный способ сделать это?Это сделало бы вещи намного проще , если бы я мог просто сказать, «Изменить текущий путь , но не перезагрузить контроллер.»Возможен ли вариант №4?Если нет, то есть ли способ лучше?Может какое-то волшебное «Сделай угловым, но как-то не обновляй контроллер»?
7 голосов | спросил Eli Courtwright 4 MarpmTue, 04 Mar 2014 20:25:59 +04002014-03-04T20:25:59+04:0008 2014, 20:25:59

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132