我有一个使用服务加载项目列表的视图。我总是只显示一个项目,在项目之间移动<< >>的按钮。
有没有办法在浏览器的地址栏中更改地址,并在不触发Angular路由系统的情况下将记录添加到浏览器的历史记录中?
我知道如果我使用:
location.go('users/3');
它会做上述事情,但它也会触发Angular的路由系统,后者又会再次调用我的服务。
编辑:
它似乎是位置的功能
location.replaceState('users/3');
接近我想要做的事情 - 它在浏览器中更改url而不触发任何Angular内部,不幸的是它取代历史中的最新位置而不是在顶部推送新的位置。
答案 0 :(得分:1)
如果您不将服务添加到组件provider:
列表,则不会获得此服务的新实例。只需在bootstrap(AppComponent, [MyGlobalService])
中注册即可使服务全局化。
实施CanReuse另请参阅Angular 2: Swapping between different components without destroying them可能有助于防止在重复使用相同路由时重新初始化组件。