在Aurelia中设置URL而不刷新整个模板

时间:2016-03-01 17:22:00

标签: javascript aurelia aurelia-router

在我的 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在开发控制台中亮起/闪烁)。

但是,使用路由器与仅更新内部绑定变量似乎存在一点差异,因此如果有人确切知道发生了什么,那将是有启发性的。

1 个答案:

答案 0 :(得分:3)

为什么不使用History's API pushState method

 history.pushState({someState : someStateValue}, "new title", newUrl);

当然,当用户深度链接到该URL时,您需要自己处理正确状态的恢复。您可以在params对象

的激活方法中执行此操作
activate(params){
    // params.relevantStateValue1
    // params.relevantStateValue2
    // etc
}