所谓路由,当然是尽可能兼容类似“url”的操作。虽然是单页应用,但整个系统只有一个页面,每个功能状态也可能对应一个url,所以我们从这个角度来看它的行为:
首页到详情页:这一步可以看作是一个新链接的跳转。由于详情页上的所有内容以前都不存在,因此重新创建了其数据和界面,您同意这一点。
详情页返回首页:这个“返回”可以有两种理解,一种是点击一个链接跳转回来,另一种是按下浏览器的返回按钮。这两种行为所表达的意思应该是不同的。
首先考虑一个问题网页上的按钮点不动,当你已经进入详情页时,首页还存在吗?不管是接口还是控制器实例,虽然没有了,但为什么要这样设计呢?对于单页系统,如果不破坏已经留下的东西网页上的按钮点不动,每点击一次后,整个系统的所有模块都会被实例化。此时,系统资源被占用很多。一方面,状态不容易同步是一件很可怕的事情,所以会破坏已经离开的页面。
从另一个角度来说,由于应用的状态对应的是url,所以不应该区分这两种情况:
-从已有接口点击另一个接口A对应的url访问A
-在新浏览器的地址栏中直接输入A的url即可访问A
两者应该是等价的,应该对前面的操作界面没有依赖。
考虑到这些因素,滚动条位置不太可能被保留,除非它是单击浏览器的后退机制,这对您有额外的作用。
面对你的业务场景,你可以使用ng-if或ng-show之类的东西,不用路由就可以在不同的界面之间切换,点击时控制状态和界面的对应关系。