javascript - 如何使用 Angular 路由?

标签 javascript angular angular2-routing

我有一个页面(比如 page3)可以从其他两个页面访问,比如 page1(父 URL 将是 parent1 - parent1/page1)和页面 2(父 URL 将是 parent2 - parent2/page2)。

由于默认情况下 Angular 会更改 URL,所以我只想在我从第 2 页导航时阻止 URL 更改,并且当我从第 1 页(对于所有具有父 URL 作为 parent1 的页面)导航时,我希望 URL 正常更改。

我们可以这样做

router.navigate('page2',{skipLocationChange: true});

但是由于我有更多页面,如 page4、page5、page6 等,而且我想防止仅针对特定页面更改位置,我该如何在公共(public)位置执行此操作。

最佳答案

您可以订阅特定组件中的路由器事件: https://v2.angular.io/docs/ts/latest/api/router/index/NavigationStart-class.html

在事件处理程序中(导航启动后),您可以检查什么是父 URL 并使用 history.replaceState() 等方法覆盖它

您可以创建全局配置注入(inject),它会定义所有规则(即覆盖哪些 URL,哪些不覆盖)。这样你就不需要重构所有的 router.navigate 而只需在组件类中为每个组件指定一次规则:

constructor(router: Router, overrideUrlService: overrideUrlService) {
  router.events.subscribe(event => {
    if(event instanceof NavigationStart) {
        //have the override logic in some injectable service
        overrideUrlService.checkUrl(event.url);
    }
  }
});

关于javascript - 如何使用 Angular 路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46445755/

相关文章:

Angular 2 : Configuration 'name' conflicts with existing route 'name'

angular - 通过路由器导出与子路由共享数据的正确方法?路由器 3.0.0-alpha.7

javascript - 调查后重定向到thankyou.aspx页面

angular - 人工审核 - 有些漏洞需要您注意才能解决

javascript - 生成的解析器在 Node.js 上为转义引号抛出错误

javascript - 有人可以解释以下示例中 ...spread 运算符的使用吗?

javascript - 将 Array 序列化为元素,使用 RxJS 进行转换,并将元素组装回数组

angular - window.scrollTo(0, 0) 和 scrollTop = 0 不适用于 Angular 2 路由更改

javascript - 关于js对象

javascript - 为什么这个 Javascript 语法有效?