所以我学习镖和web开发一般。 现在,我与历史API试验。 我有:
import 'dart:html';
void main() {
ParagraphElement paragraph = querySelector('.parag');
ButtonElement buttonOne = querySelector('.testaja');
buttonOne.onClick.listen((_) {
window.history.pushState(null, 'test title', '/testdata/');
window.history.forward();
});
ButtonElement buttonTwo = querySelector('.testlagi');
buttonTwo.onClick.listen((_) {
window.history.back();
});
window.onPopState.listen((_) {
window.alert(window.location.pathname);
});
}
我的结论是, onPopState
当我们点击浏览器的后退或前进按钮,或者只使用触发器window.history.forward()
或window.history.back()
因此,这就像,我们渲染一个模板,然后用改变其网址pushState
,不更新基于URL的变化模板。 这是真的还是假的?
编辑:
所以,也许我不太清楚。 比方说,我有这样的事情:
void main() {
InputElement input = querySelector('.input')
ButtonElement changeUrl = querySelector('.change-url');
changeUrl.onClick.listen((event) {
window.history.pushState(null, 'test tile', input.value);
});
Map urls = {
'/' : showRoot,
'/user/:id' : showUserProfile
};
window.onPopState.listen((_) {
var location = window.location.pathname;
urls[location]();
});
}
我可以input
点击的价值changeUrl
,然后通过添加一个监听器changeUrl
,我可以使用pushState
对浏览器更新URL。 我很期待,当我做pushState
,该window.onPopState
将触发并调用回调,在现实中却并非如此。
tldr,我想要实现的是:
监听URL的改变 - >获取当前URL - >使用当前的URL来调用存储在地图中的处理程序。 使用onHashChange
也使用更新URL时不起作用pushState
由前缀#
。