首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Angular routing?

如何使用Angular routing?
EN

Stack Overflow用户
提问于 2017-09-27 18:39:55
回答 2查看 62关注 0票数 1

我有一个页面(比方说page3),可以从另外两个页面访问,比如page1(父URL将是parent1 - parent1/page1)和Page2(父URL将是parent2 - parent2/page2)。

由于angular在默认情况下会更改URL,因此我希望仅当我从page2导航时才阻止该URL更改,并且我希望当我从第1页导航时URL可以正常更改(对于所有父url为parent1的页面)。

我们可以通过以下方式完成此操作

代码语言:javascript
复制
router.navigate('page2',{skipLocationChange: true});

但是,既然我有更多的页面,比如page4、page5、page6等,并且我只想防止特定页面的位置发生变化,那么我如何才能在一个普通的地方这样做呢?

EN

回答 2

Stack Overflow用户

发布于 2017-09-27 19:21:21

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

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

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

代码语言:javascript
复制
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);
    }
  }
});
票数 1
EN

Stack Overflow用户

发布于 2017-09-27 19:06:54

我认为一种简单明了的方法是将路由器导航封装在实现特定应用程序需求的帮助器类(或函数)中。

代码语言:javascript
复制
@Injectable
class LocationAwareRouter {
    constructor(private router: Router) {
    }

    public navigate(url: string) {
        this.router.navigate(url, { skipLocationChange: this.isLocationChange(url) };
    }

    private isLocationChange(url: string): boolean {
        return /* your fancy URL evaluation here */ ;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46445755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档