feat(router): add hash-based navigation option to setUpLocationSync (#28609)
The `setUpLocationSync` function in @angular/router/upgrade didn't previously let you sync hash-based navigations. With this change, you can now pass an option to `setUpLocationSync` that will make sure location changes run in Angular in hash-based apps. Fixes #24429 #21995 PR Close #28609
This commit is contained in:
@ -79,6 +79,30 @@ describe('setUpLocationSync', () => {
|
||||
expect(RouterMock.navigateByUrl).toHaveBeenCalledWith(normalizedPathname + query + hash);
|
||||
});
|
||||
|
||||
it('should allow configuration to work with hash-based routing', () => {
|
||||
const url = 'https://google.com';
|
||||
const pathname = '/custom/route';
|
||||
const normalizedPathname = 'foo';
|
||||
const query = '?query=1&query2=3';
|
||||
const hash = '#new/hash';
|
||||
const combinedUrl = url + '#' + pathname + query + hash;
|
||||
const $rootScope = jasmine.createSpyObj('$rootScope', ['$on']);
|
||||
|
||||
upgradeModule.$injector.get.and.returnValue($rootScope);
|
||||
LocationMock.normalize.and.returnValue(normalizedPathname);
|
||||
|
||||
setUpLocationSync(upgradeModule, 'hash');
|
||||
|
||||
const callback = $rootScope.$on.calls.argsFor(0)[1];
|
||||
callback({}, combinedUrl, '');
|
||||
|
||||
expect(LocationMock.normalize).toHaveBeenCalledTimes(1);
|
||||
expect(LocationMock.normalize).toHaveBeenCalledWith(pathname);
|
||||
|
||||
expect(RouterMock.navigateByUrl).toHaveBeenCalledTimes(1);
|
||||
expect(RouterMock.navigateByUrl).toHaveBeenCalledWith(normalizedPathname + query + hash);
|
||||
});
|
||||
|
||||
it('should work correctly on browsers that do not start pathname with `/`', () => {
|
||||
const anchorProto = HTMLAnchorElement.prototype;
|
||||
const originalDescriptor = Object.getOwnPropertyDescriptor(anchorProto, 'pathname');
|
||||
@ -98,4 +122,5 @@ describe('setUpLocationSync', () => {
|
||||
Object.defineProperty(anchorProto, 'pathname', originalDescriptor !);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
Reference in New Issue
Block a user