这个'的价值是什么? RxJS

时间:2018-01-24 11:46:57

标签: javascript angular rxjs

尝试在路由事件后显示弹出窗口我面临此问题:

  • 角度路由事件在一次routerLink点击后多次触发,因此我打开了许多弹出窗口。
  • 为了解决第一个问题,我创建了一个布尔值来检查它是否是第一个事件。 但是当我尝试在第一个路由事件调用之后更改布尔值时,它总是在后面的事件中采用相同的值。 我的问题是:thissubscribe的值是否是我的组件的副本?,否则会导致此问题的原因以及如何解决它。 非常感谢。

代码:

@Component({
template ='<a routerLink ="/something" >' 
})

export class MyComponent implements OnInit{

    firstcall : boolean = true;
    constructor(private _router : Router){
        this._router.events.filter(event => event instanceof NavigationStart && something)
        .subscribe( (event) => {
            if(this.firstcall) {
                this.showPopup()
                this.firstcall=false
            }
        }
    }
 }

更新

即使this._router.events.distinct(event => event['url']).subscribe无法正常工作

1 个答案:

答案 0 :(得分:0)

在订阅调用之前添加一个“this”变量(类),并在subscribe中使用该变量,否则它使用subscribe方法的“this”实例。

试试这个,

@Component({
template ='<a routerLink ="/something" >' 
})

export class MyComponent implements OnInit{

    firstcall : boolean = true;
    that : any = this;
    constructor(private _router : Router){
        this._router.events.filter(event => event instanceof NavigationStart && something)
        .subscribe( (event) => {
            if(that.firstcall) {
                that.showPopup()
                that.firstcall=false
            }
        }
    }
}

希望这有帮助!