fix: use replace state instead of pushState

fixes #244
This commit is contained in:
Roman Hotsiy 2017-03-31 19:53:01 +03:00
parent b9740bfe55
commit 4f4e7489ce
No known key found for this signature in database
GPG Key ID: 5CB7B3ACABA57CB0
2 changed files with 9 additions and 5 deletions

View File

@ -27,8 +27,12 @@ export class Hash {
}); });
} }
update(hash: string|null) { update(hash: string|null, rewriteHistory:boolean = false) {
if (hash == undefined) return; if (hash == undefined) return;
if (rewriteHistory) {
window.history.replaceState(null, '', '#' + hash);
return;
}
this.noEmit = true; this.noEmit = true;
window.location.hash = hash; window.location.hash = hash;
setTimeout(() => { setTimeout(() => {

View File

@ -202,14 +202,14 @@ export class MenuService {
} }
} }
activate(idx, force = false) { activate(idx, force = false, replaceState = false) {
let item = this.flatItems[idx]; let item = this.flatItems[idx];
if (!force && item && !item.ready) return; if (!force && item && !item.ready) return;
this.deactivate(this.activeIdx); this.deactivate(this.activeIdx);
this.activeIdx = idx; this.activeIdx = idx;
if (idx < 0) { if (idx < 0) {
this.hash.update(''); this.hash.update('', replaceState);
return; return;
} }
@ -220,14 +220,14 @@ export class MenuService {
cItem.parent.active = true; cItem.parent.active = true;
cItem = cItem.parent; cItem = cItem.parent;
} }
this.hash.update(this.hashFor(item.id, item.metadata, item.parent && item.parent.id)); this.hash.update(this.hashFor(item.id, item.metadata, item.parent && item.parent.id), replaceState);
this.changedActiveItem.next(item); this.changedActiveItem.next(item);
} }
changeActive(offset = 1):boolean { changeActive(offset = 1):boolean {
let noChange = (this.activeIdx <= 0 && offset === -1) || let noChange = (this.activeIdx <= 0 && offset === -1) ||
(this.activeIdx === this.flatItems.length - 1 && offset === 1); (this.activeIdx === this.flatItems.length - 1 && offset === 1);
this.activate(this.activeIdx + offset); this.activate(this.activeIdx + offset, false, true);
return noChange; return noChange;
} }