据我所知,在 Durandal 应用程序中的视图模型之间传递参数的唯一无缝方式是使用普通的基于哈希的 url 参数。
在您的示例中,您可以定义一个带有 orderId 和 repairOrder 参数的路由器,然后您的网址将如下所示: http://localhost:60312/#/page/2/2
如果您的数据不太敏感,这是最佳选择。将导航参数保持打开状态,并在第二个视图模型中小心处理这些值。换句话说,设计您的视图模型,使其能够正确处理任何值——即使用户直接修改参数值,您的视图模型也应该能够正确处理它。
能够直接设置 url 参数可能是有利的,但在使用它们之前必须小心确保值的完整性。
但是,如果您需要隐藏参数,您确实有一些不同的选择:
加密:使用tea.js之类的加密库,对值进行加密,然后将其添加为导航的参数值。然后,当然,在使用它之前在第二页上对其进行解密。这允许 Durandal 的router
导航正常工作,同时阻止用户提供自己的值。
如果您确实需要阻止用户输入自己的值,并且您可以承担一些额外 KB 的开销,那么只要您只需要传递几个参数,这是一个很好的方法。
共享数据模型:使用在两个视图模型之间共享的单例模型。此模型可以根据required()
需要手动进行,并且本质上用作在一个或多个视图模型之间共享的应用程序状态的存储库。这很好用,但有点像拥有一个大的全局变量——如果过度使用它会变得混乱。
直接修改 VM:( 仅适用于单例视图模型)在导航到第二个视图模型之前
手动require()
设置其属性。