【问题标题】:How to enable route tracing programmatically in Angular 2?如何在 Angular 2 中以编程方式启用路由跟踪?
【发布时间】:2017-05-29 11:05:43
【问题描述】:

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

export const routing: ModuleWithProviders = 
    RouterModule.forRoot(routes, { enableTracing: true });

有没有办法以编程方式设置该值?

我有一个 config.json 文件,其中包含许多应用程序设置。我想包含一个布尔属性,可用于控制是否启用跟踪。我不希望客户能够修改包含我的路由的文件,但仍然能够打开跟踪以帮助调试没有被测试捕获的边缘情况。

我可以重新启动应用程序,但不可以重新构建。

[更新] 查看路由器源代码后,如果没有拉取请求,它看起来并不可行。对需要进行哪些更改的简单说明:

  1. 在 router.ts 中,添加一个名为 tracking: boolean 的公共属性
  2. 在 router_module.ts::setupRouter 中:

    • 更改
      if (opts.enableTracing) {
      

      router.tracing = opts.enableTracing</pre>
      

    • 更改可观察对象:
      router.events.subscribe(e => { ...
      

      router.events
         .filter(e => router.tracing)
         .subscribe(e => { ...</li>
      

3. 可能需要对追踪属性添加一些验证。

通过这些更改,可以导入 Router,然后设置 router.tracing 属性以打开和关闭它。

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

【问题讨论】:

  • 我看到这个问题没有回复。你曾经做过这项工作吗?
  • 这似乎仍然是一个问题。 2017 年 Angular GitHub 上出现了一个问题,但很快就关闭了。 github.com/angular/angular/issues/21015

标签: debugging angular routing


【解决方案1】:

目前还没有明确的方式以编程方式进行。我们的解决方法是只为local development 启用它,以便我们可以获得所有详细信息/异常堆栈跟踪等。类似于:

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

【讨论】:

    猜你喜欢
    • 2018-01-21
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多