Add hook for replaceState (#494)
* Add hook for replaceState * Clarify why replaceState is dangerous
This commit is contained in:
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user