如何在Angular 2中以编程方式启用路由跟踪?

15

我知道我可以在Angular 2路由器上启用跟踪:

export const routing: ModuleWithProviders = 
    RouterModule.forRoot(routes, { enableTracing: true });
有没有办法以编程的方式设置该值?
我有一个 config.json 文件,其中包含许多应用程序设置。我想包含一个布尔属性,可用于控制是否打开跟踪功能。我不想让客户修改包含我的路由的文件,但仍希望能够打开跟踪以帮助调试未被测试捕获的边缘情况。
我可以接受必须重新启动应用程序,但不能接受必须重新构建。
[更新] 查看路由器源代码后,发现无法在没有拉取请求的情况下实现。更改所需的简单解释:
1. 在 router.ts 中添加一个名为 tracing 的公共属性。 2. 在 router_module.ts::setupRouter 中:
if (opts.enableTracing) {
to
router.tracing = opts.enableTracing</pre>

  • 更改可观察对象:

    router.events.subscribe(e => { ...
    
    "to"
    router.events
       .filter(e => router.tracing)
       .subscribe(e => { ...</li>
    
  • 3. 可能需要在跟踪属性上添加一些验证。

    通过这些更改,可以导入 Router,然后设置 router.tracing 属性以启用或禁用它。

    我不知道在没有订阅者的情况下发出所有事件和使用过滤订阅发出所有事件之间的性能差异。


    1
    我看到这个问题没有得到回复。你最终能够解决这个问题吗? - DeborahK
    这似乎仍然是一个问题。2017年在Angular GitHub上提出了一个问题,但很快就被关闭了。https://github.com/angular/angular/issues/21015 - k0nG
    1个回答

    8

    目前还没有明确的以编程方式实现的方法。我们的解决方法是只在本地开发环境中启用它,这样我们就可以获得所有的详细信息/异常堆栈跟踪等。类似于:

    let routes = [{path: ..., component : ...}, ...];
    RouterModule.forRoot(routes, {
                           enableTracing: /localhost/.test(document.location.host)
                         });
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接