2016-03-01 34 views
2

在我的Aurelia webapp,我有一个页面的链接。这些被捕获到一个click.delegate="",它转到了代码隐藏方法。然后,视图代码将使用http-fetch来进行AJAX调用,然后通过更新绑定到HTML模板中某些元素的内部变量来刷新数据。完美工作,除了一件事 - 它没有反映在URL位置栏(在浏览器中 - 所以书签是不可能的)。设置URL而不刷新整个模板在Aurelia

一个解决方案是创建一个带参数的路由。这将调用activated()方法w。参数。我观察到构造函数是而不是反复调用(当导航到相同的路线,但具有不同的参数)时,所以我猜想正在使用ViewModel的同一个实例。

{ route: 'cell-detail/:id', name: 'cell-detail', moduleId: 'cell-detail',  title: 'cell-detail' }, 

不过,我想知道(和防止)被渲染的每一次,不只是改变绑定变量的部分全HTML模板。我已经在使用activationStrategy.invokeLifecycle,所以也许它已经以这种方式工作了。我不知道如何找出答案。

这是否正确,如果有的话,有没有更新URL /位置栏的方法,而无需重新绘制整个HTML模板(设置一个新的位置以反映内部更改而不使用路由器)?

更新 观察在Chrome开发者工具的元素选项卡中的DOM的变化,好像奥里利亚只更新有什么变化 - 等反应的影子-DOM。如果使用activationStrategy.replace,至少有一个很大的可见区别(HTML在开发控制台中亮起/闪烁)。

然而,使用路由器与仅更新内部绑定变量似乎有一点区别,所以如果有人确切知道发生了什么事情,那将是有启发性的。

回答

2

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

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

当然,你需要处理的正常状态的恢复自己当用户深层链接到该网址。你可以在params对象的激活方法中做到这一点

activate(params){ 
    // params.relevantStateValue1 
    // params.relevantStateValue2 
    // etc 
} 
+0

有趣的,我会研究一下。谢谢。 – specimen

+1

这似乎完美!我在文档中看到,路由器中也有一些内置的PushState支持。 – specimen