mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-05-09 07:14:44 +00:00
fix($location): correctly parse link urls in hashbang mode with prefix
This is a second fix for a regression that was introduced by 92a2e180.
The fix addresses scenarios when the $location service is configured with
a hash prefix.
Closes #1037
This commit is contained in:
parent
f6b09b9139
commit
0f44964e5e
2 changed files with 31 additions and 1 deletions
|
|
@ -525,7 +525,7 @@ function $LocationProvider(){
|
||||||
|
|
||||||
// update location with href without the prefix
|
// update location with href without the prefix
|
||||||
href = absHref.substr(absUrlPrefix.length);
|
href = absHref.substr(absUrlPrefix.length);
|
||||||
if (href.charAt(0) == '#') href = href.substr(1);
|
if (href.indexOf('#' + hashPrefix) == 0) href = href.substr(hashPrefix.length + 1);
|
||||||
$location.url(href);
|
$location.url(href);
|
||||||
$rootScope.$apply();
|
$rootScope.$apply();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
|
||||||
|
|
@ -999,6 +999,36 @@ describe('$location', function() {
|
||||||
$rootElement.remove();
|
$rootElement.remove();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
it('should not mess up hash urls when clicking on links in hashbang mode with a prefix',
|
||||||
|
function() {
|
||||||
|
var base;
|
||||||
|
module(function($locationProvider) {
|
||||||
|
return function($browser) {
|
||||||
|
window.location.hash = '!someHash';
|
||||||
|
$browser.url(base = window.location.href);
|
||||||
|
base = base.split('#')[0];
|
||||||
|
$locationProvider.hashPrefix('!');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
inject(function($rootScope, $compile, $browser, $rootElement, $document, $location) {
|
||||||
|
// we need to do this otherwise we can't simulate events
|
||||||
|
$document.find('body').append($rootElement);
|
||||||
|
|
||||||
|
var element = $compile('<a href="#!/view1">v1</a><a href="#!/view2">v2</a>')($rootScope);
|
||||||
|
$rootElement.append(element);
|
||||||
|
var av1 = $rootElement.find('a').eq(0);
|
||||||
|
var av2 = $rootElement.find('a').eq(1);
|
||||||
|
|
||||||
|
|
||||||
|
browserTrigger(av1, 'click');
|
||||||
|
expect($browser.url()).toEqual(base + '#!/view1');
|
||||||
|
|
||||||
|
browserTrigger(av2, 'click');
|
||||||
|
expect($browser.url()).toEqual(base + '#!/view2');
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue