Mat*_*r K 8 angular2-services angular
我在Angular 2应用程序中使用ngx-progressbar bar.当应用程序首先加载它工作正常.第二次出现错误.我引用了一些像medium.com这样的文章来订阅对象.我没弄清楚.每次点击路由器链接时我都需要进度栏.
进度条形码:
import { Component, AfterContentInit} from '@angular/core';
import { NgProgress } from 'ngx-progressbar'
@Component({
selector: 'link-outlet',
template: '<ng-progress [showSpinner]="false"></ng-progress>'
})
export class RoutingDirectiveComponent implements AfterContentInit{
constructor(private ngProgress: NgProgress) {
}
ngAfterContentInit(){
this.ngProgress.start();
setTimeout(()=>{
this.ngProgress.done();
}, 2000);
}
}
Run Code Online (Sandbox Code Playgroud)
您的建议将不胜感激.
kbp*_*ius 39
我知道这是一个老帖子,我相信,现在我们正在使用Angular 6.但是,我收到此错误并希望发布解决方案.
当我.unsubscribe()直接打电话给我打过的对象时,我遇到了这个问题.subscribe().但是,当您订阅某个事件时,该方法会返回一个Subscription键入的值.您需要保存它(可能在您的组件的类上),然后在完成后调用该订阅对象上的取消订阅.
例子
坏代码:
this.someEvent.subscribe(() => {
// DO SOMETHING
})
...
this.someEvent.unsubscribe()
Run Code Online (Sandbox Code Playgroud)
好代码:
this.myEventSubscription = this.someEvent.subscribe(() => {
// DO SOMETHING
})
...
this.myEventSubscription.unsubscribe()
Run Code Online (Sandbox Code Playgroud)
同样,您需要取消订阅Subscription该.subscribe()方法在调用时返回的对象.
祝好运!
我真的很喜欢@kbpontius 说的方式,所以我也在做同样的方法
每当您订阅时,请订阅新变量。所以取消订阅后就可以订阅了 例子
错误代码:
this.someEvent.subscribe(() => {
// DO SOMETHING
})
...
ngOnDestroy() {
this.someEvent.unsubscribe()
}
Run Code Online (Sandbox Code Playgroud)
好代码:
声明事件名称
myEventSubscription: any;
Run Code Online (Sandbox Code Playgroud)
//现在可以这样使用了
this.myEventSubscription = this.someEvent.subscribe(() => {
// DO SOMETHING
})
Run Code Online (Sandbox Code Playgroud)
...
//现在在销毁组件的最后阶段取消订阅。如果您想销毁同一组件中的服务,您也可以在其他函数中销毁
ngOnDestroy() {
this.myEventSubscription.unsubscribe()
}
Run Code Online (Sandbox Code Playgroud)
同样,您需要取消订阅 .subscribe() 方法在您调用它时返回的订阅对象。
发生这种情况是因为在进度条运行时保存进度条的组件正在被销毁,因此您应该放入<ng-progress></ng-progress>根组件(或不会被销毁的组件)
如果您正在使用 http 请求的进度,则有一个名为automagic progressbar的新功能,您可能想尝试一下!
从 v2.1.1 开始,您可以在任何地方使用该组件而不会出现该错误
| 归档时间: |
|
| 查看次数: |
10103 次 |
| 最近记录: |