Angularjs $location.hash делает ##, но мне нужно #
AngularJS 1.2.0 (но более низкие версии имеют одинаковую проблему)
У меня есть веб-приложение с некоторыми виджетами и вы хотите сохранить их состояние в URL.
Теперь я делаю это с помощью команды $location.hash('param1=1¶m2=678')
. Но я получаю url как: domain.com/##param1=1¶m2=678
Он работает нормально, я могу восстановить состояние своего приложения. Одна из проблем, с которой я сталкиваюсь, - это когда кто-то щелкает такую ссылку, например, в почтовом приложении, их браузер кодирует один из хэшей с помощью /23, и поэтому мое приложение идет не так. Как я могу это решить? Благодаря
Вот панель: http://plnkr.co/edit/VVjEUzROou6hu8B8sURa?p=preview
Вам нужно открыть его в новом окне, чтобы проверить хэши
Ответы
Ответ 1
для стандартных хэш-позиций в angular, вы используете
location.path("myappstate/1");
как angular настроен, чтобы думать о первом хеш-состоянии в качестве основного URL-адреса или пути для приложения. Функция location.hash() устанавливает вторичный хеш в основном хеш-состоянии (путь)
Ответ 2
Это не лучший ответ, но вы можете попытаться ввести $locationProvider и установить:
$locationProvider.html5Mode(true);
Таким образом, angular работает в режиме HTML5 и не использует hashbangs. Я рекомендую этот вопрос SO для получения дополнительной информации.
Ответ 3
Попробуйте использовать
$location.search("key", "value")
вместо этого.
Если у вас сложное состояние, вы можете даже напрямую предоставить объект методу поиска:
$location.search({foo: bar, baz: duh});