在我的 Aurelia webapp中,我有一个包含链接的页面。这些是click.delegate=""
捕获的,它转到代码隐藏中的方法。然后,视图代码将使用http-fetch进行AJAX调用,然后仅通过更新绑定到HTML模板中某些元素的内部变量来刷新数据。完美无缺,除了一件事 - 它没有反映在URL位置栏中(在浏览器中 - 因此书签是不可能的)。
一种解决方案是使用参数创建路线。这将调用activated()
方法,w。参议院。我观察到构造函数不一遍又一遍地调用(当导航到相同的路径,但是使用不同的参数时),所以我猜想正在使用ViewModel的相同实例。 / p>
{ route: 'cell-detail/:id', name: 'cell-detail', moduleId: 'cell-detail', title: 'cell-detail' },
但是,我想知道(并防止)每次渲染整个HTML模板,而不仅仅是更改的绑定变量的一部分。我已经在使用activationStrategy.invokeLifecycle
了,所以也许它已经按照这种方式工作了。我不知道如何找到答案。
这是否正确,如果是这样,有没有办法更新URL /位置栏,而不重新绘制整个HTML模板(设置一个新位置以反映内部更改,而不使用路由器)?
更新
观察Chrome开发者工具中 Elements 标签中的DOM更改,似乎Aurelia只更新了更改内容 - 例如React的影子。如果使用activationStrategy.replace
,至少存在明显的差异(HTML在开发控制台中亮起/闪烁)。
但是,使用路由器与仅更新内部绑定变量似乎存在一点差异,因此如果有人确切知道发生了什么,那将是有启发性的。
答案 0 :(得分:3)
为什么不使用History's API pushState method
history.pushState({someState : someStateValue}, "new title", newUrl);
当然,当用户深度链接到该URL时,您需要自己处理正确状态的恢复。您可以在params
对象
activate(params){
// params.relevantStateValue1
// params.relevantStateValue2
// etc
}