关于Angular应用程序对浏览器后退按钮的支持的讨论,一种可能的方法是实现一个Guard并将其应用于所需的路由。示例代码:import{LocationStrategy}from'@angular/common';@Component({selector:'app-root'})exportclassAppComponent{constructor(privatelocation:LocationStrategy){history.pushState(null,null,window.位置.href);//检查后退或前进按钮是否被按下。this.location.onPopState(()=>{history.pushState(null,null,window.location.href);this.stepper.previous();});}}Spartacus项目中RoutingService的back方法的实现。VisualStudioCode的peek参考功能显示没有其他代码调用此返回方法。Angular中的CanDeactivateGuard可用于避免导航到与应用程序位于同一域的另一个页面。当我们在浏览器地址栏中输入一个新的URL地址时,我们得到一个新的页面,这个URL保存在浏览器历史记录中。使用此历史记录,我们可以返回到以前查看过的页面。像Angular这样的SPA应用程序呢?大多数时候,在Angular中我们有一个静态路由,但是我们改变了当前页面上的内部组件。标准浏览器历史记录不适用于Angular单页应用程序。我们可以编写自己的服务来监听用户在Angular应用程序中更改路由的时间。新的Route会被保存,当用户点击后退按钮时,我们给出最后一次保存的路由记录。在我们存储路线历史的导航服务中,我们订阅了路线更改事件。我们将每条新路线保存在一个数组中。显然,这个服务包含一个方法来获取之前的路由并返回它。Spartacus对此navigationEnd事件没有特殊处理:请参见具体示例。UserListComponent应该包含所有用户的列表,而ActiveUsersComponent只包含用户的一个子集。这两个组件都将链接到UserDetailComponent,然后我们希望从该组件导航回来。constroutes:Routes=[{path:'users',component:UsersComponent,children:[{path:'',component:UserListComponent},{path:'active',component:ActiveUsersComponent},{path:':id'},component:UserDetailComponent},],},{path:'**',redirectTo:'users'},]静态路由一种解决方案是在detail组件中定义路由器链接,并使用绝对路由显式导航回Parent:
