目的:
我正在创建搜索功能,希望能够搜索某些内容,更改URL,但不希望Angular使用查询字符串导航到路线。例如:如果我搜索世界“ hello”,则URL应更改为/ search?q = hello。需要注意的是,我有一个canDeactivate
警卫,当返回false时,会将URL重置为条目页面。由于在这种情况下,我用来在浏览器中更改URL的方法没有更改路由,因此该方法恢复为/ search。
我到目前为止所拥有的:
我已经看到了一些示例,这些示例说明了如何通过使用location.go
或location.replaceState
来更改浏览器URL而不重定向Angular。
虽然这可用于更改浏览器URL,但我需要更改实际的路由器状态而不重定向页面。例如:如果我做类似的事情:
location.replaceState("search", "?parameter=testing")
console.log(this.route.snapshot);
我未获得URL或任何参数键的替换状态。我只收到进入页面(在我的情况下是/ search)。
问题:
如何更改Angular路由器而不触发导航到新页面?或者,如何让我的canDeactivate
防护人员重定向到正确的URL而不是进入状态?
答案 0 :(得分:0)
不删除此内容以防其他人使用。 router.navigate可以按照我的需要正常工作,但是我订阅路由参数的行为触发了路由器导航更改中的事件。我将路由参数更新为仅在页面加载时触发,以防止无限循环并防止页面损坏。