Подтвердить что ты не робот

$ location.path() vs $location.hash() в angularjs

если мой текущий URL-адрес: xzy.com/#/home/new

$location.hash() дает home/new и $location.path также дает home/new

  • В чем разница между двумя?
  • Если внутри контроллера дома/нового я пишу $location.hash("#/home/new") или $location.path("/home/new"), оба не перезагружают частичный, но если я делаю location.href="#/home/new", он перезагружает частичное. Почему это?

Кроме того, если внутри частичного есть <a href="#/home/new">, который также перезагрузит частичный. Почему не задан путь/хеш для перезагрузки частичного?

4b9b3361

Ответ 1

Есть две части маршрута.

Первый "хэш" действительно существует только для совместимости браузера и не будет отображаться, если вы находитесь в режиме HTML5.

Например, с учетом этого URL-адреса:

http://localhost/spa.htm 

Если вы установили:

$location.path('/myPath'); 

вы получите:

http://localhost/spa.htm#/myPath

В этом случае "хэш" предназначен только для браузера, чтобы удерживать URL-адрес, метод - это путь. Обратите внимание также, когда вы вызываете путь без предшествующего/он добавляется, т.е. 'myPath' становится '/myPath'.

Если вы впоследствии установите:

$location.hash('myHash'); 

Вы получите:

http://localhost/spa.htm#/myPath#myHash 

Наконец, предположим, что вы не установили путь первым, тогда вы получите:

http://locahost/spa.htm#/#myHash 

Если вы используете режим HTML5, путь добавляется без начального хэша.

Первый хеш используется для добавления маршрута, второй - ссылкой на контент на странице. Например, если вы используете службу $anchorScroll, она ответит на то, что помещается в $location.hash(), а не в $location.path().

Подводя итог:

http://localhost/spa.htm#{path}#{hash}

Ответ 2

У меня был аналогичный вопрос сегодня утром, после чего Google привел меня сюда. Вдохновленный другими ответами и некоторыми Googlings, которые я сделал, вот мой результат:

например, с учетом URL-адреса браузера:

http://localhost:8080/test.html#!/testpath#testhash%20with%20someothers

в AngularJS,

  • url

    /testpath # testhash

  • path -

    /testpath

    в другом слове слева направо, path начинается с первого символа в URL-адресе и заканчивается на # или ? или в конце URL-адреса.
    path всегда начинаться с '/'.so, если не указано path, путь устанавливается как "/", а не ""

  • hash

    testhash %20with %20someothers

в другом слове hash начинается со следующего символа # в url и заканчивается в конце url

location.href не реализуется в AngularJS. когда вы говорите: location.href="#", он ведет себя как щелчок тега anchor:

<a href="#">click</a>

при вызове метода $location.path, $location.hash в качестве сеттеров они меняют URL-адрес браузера в соответствии с вашими требованиями.
И почему вы хотите, чтобы AngularJS на странице RELOAD на странице?:)

Ответ 3

Причина второй части вашего вопроса, почему она не перенаправляется, может быть:

Возможно, вам потребуется обновить привязку с помощью $scope. $apply, это необходимо, если вы используете код, отличный от angular, например, собственный javascript, код jquery

например:

$scope.$apply(function(){
   $location.path("#/home/new");  
})