Add hook for replaceState (#494)

* Add hook for replaceState

* Clarify why replaceState is dangerous
This commit is contained in:
Emil Bay
2017-05-19 14:56:45 +02:00
committed by Yoshua Wuyts
parent 1d8fd02da2
commit 736e4b4514
2 changed files with 7 additions and 3 deletions
+1
View File
@@ -262,6 +262,7 @@ Choo fires messages when certain events happen:
The `render` event should be emitted (`emitter.emit('render')`) whenever you want the app to re-render the DOM - it won't happen on its own except when you navigate between routes. The `render` event should be emitted (`emitter.emit('render')`) whenever you want the app to re-render the DOM - it won't happen on its own except when you navigate between routes.
The `pushState` can be emitted to navigate between routes: `emitted.emit('pushState', '/some/route')`. The `pushState` can be emitted to navigate between routes: `emitted.emit('pushState', '/some/route')`.
You can emit `replaceState` which will overwrite the current entry in the browser history, but be very careful as this removes the option of navigating back!
Note `render` will only have an effect once the `DOMContentLoaded` event has been fired. Note `render` will only have an effect once the `DOMContentLoaded` event has been fired.
+6 -3
View File
@@ -55,13 +55,16 @@ function Choo (opts) {
bus.emit('pushState') bus.emit('pushState')
}) })
bus.prependListener('pushState', function (href) { bus.prependListener('pushState', updateHistory.bind(null, 'push'))
if (href) window.history.pushState({}, null, href) bus.prependListener('replaceState', updateHistory.bind(null, 'replace'))
function updateHistory (mode) {
if (href) window.history[mode + 'State']({}, null, href)
bus.emit('render') bus.emit('render')
setTimeout(function () { setTimeout(function () {
scrollIntoView() scrollIntoView()
}, 0) }, 0)
}) }
if (opts.href !== false) { if (opts.href !== false) {
nanohref(function (location) { nanohref(function (location) {