【问题标题】:angular 2 - subscribe function called twiceangular 2 - 订阅函数调用了两次
【发布时间】:2016-12-20 19:36:22
【问题描述】:

我有这个代码:

import { Component } from '@angular/core';
import { ViewService } from './view.service';
import { Router, ActivatedRoute, Params } from '@angular/router';


@Component({
  selector: 'app-view',
  templateUrl: './view.component.html',
  styleUrls: ['./view.component.css'],
  providers: [ViewService]
})
    export class ViewComponent {

      constructor(viewService: ViewService, private route: ActivatedRoute) {

        this.route.params.map(params => params['id']).subscribe((id) => {
            console.log("id: "  + id);
        });

      }
    }

我已经为我的代码订阅了运行参数。 事情是 - 订阅函数被调用 两次 - 第一次 - id 未定义。 第二次 - 存在 id 值。

此问题的原因可能是什么?

【问题讨论】:

  • 你为什么在this.route.params.map(....中使用map?
  • 只是映射值而已。可以删除。但并没有真正改变问题
  • 你有没有发现这个问题?我遇到了同样的事情
  • @cgatian 是的,我确实解决了这个问题,并在下面的答案中添加了我的解决方案。尝试检查您是否在 html/routing 中调用了两次 ctor
  • 感谢您发布答案。我发现我的问题是由使用冷可观察对象并订阅两次引起的。

标签: angular


【解决方案1】:

这里的问题是我的 ViewComponent 被加载了两次。这就是构造函数被调用两次的原因:

  1. 在我的app.module.ts 定义路由时。这里:

    RouterModule.forRoot([ { path: '', component: ViewComponent }

  2. 在我的 app.component.html - 我添加了<app-view> 标签。

【讨论】:

  • 感谢发帖,最后真的像往常一样简单!
  • 对于那些发现你的构造函数加载两次的人,也可能是一个正在引导模块中的子组件。
猜你喜欢
  • 2018-08-18
  • 2018-03-16
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
相关资源
最近更新 更多