相关疑难解决方法(0)

Angular/RxJs什么时候应该取消订阅"订阅"

我应该何时存储Subscription实例并unsubscribe()在NgOnDestroy生命周期中调用,何时可以忽略它们?

保存所有订阅会在组件代码中引入很多混乱.

HTTP客户端指南忽略这样的订阅:

getHeroes() {
  this.heroService.getHeroes()
                   .subscribe(
                     heroes => this.heroes = heroes,
                     error =>  this.errorMessage = <any>error);
}
Run Code Online (Sandbox Code Playgroud)

同时," 航线与导航指南"说:

最终,我们会在其他地方导航.路由器将从DOM中删除此组件并将其销毁.在此之前我们需要自己清理.具体来说,我们必须在Angular破坏组件之前取消订阅.如果不这样做可能会造成内存泄漏.

我们取消订阅我们ObservablengOnDestroy方法.

private sub: any;

ngOnInit() {
  this.sub = this.route.params.subscribe(params => {
     let id = +params['id']; // (+) converts string 'id' to a number
     this.service.getHero(id).then(hero => this.hero = hero);
   });
}

ngOnDestroy() {
  this.sub.unsubscribe();
}
Run Code Online (Sandbox Code Playgroud)

subscription observable rxjs angular angular-component-life-cycle

653
推荐指数
10
解决办法
15万
查看次数

是否有必要取消订阅由Http方法创建的可观察对象?

您是否需要取消订阅Angular 2 http调用以防止内存泄漏?

 fetchFilm(index) {
        var sub = this._http.get(`http://example.com`)
            .map(result => result.json())
            .map(json => {
                dispatch(this.receiveFilm(json));
            })
            .subscribe(e=>sub.unsubscribe());
            ...
Run Code Online (Sandbox Code Playgroud)

memory-leaks rxjs angular2-http angular

181
推荐指数
8
解决办法
5万
查看次数

angular2风格指南 - 有美元符号的财产?

查看angular2代码示例,我们看到一些带有$ sign的公共属性:

  <....>
  private missionAnnouncedSource = new Subject<string>();
  private missionConfirmedSource = new Subject<string>();
  // Observable string streams
  missionAnnounced$ = this.missionAnnouncedSource.asObservable();
  missionConfirmed$ = this.missionConfirmedSource.asObservable();
  <....>
Run Code Online (Sandbox Code Playgroud)

谁能解释一下:

  • 为什么使用$(这种表示法背后的原因是什么?总是将它用于公共财产)?
  • 使用公共属性但不使用方法(例如missionAnnouncements(),missionConfirmations()) - 再次,这是ng2应用程序的约定吗?

在官方风格指南中似乎没有任何相关内容吗?

angular

156
推荐指数
4
解决办法
6万
查看次数

角度组件每 X 秒刷新一次页面上的数据

我需要每 30 秒刷新一次角度组件的数据。我使用简单setInterval

 this.interval = setInterval(() => {
               this.refresh(); // api call
            }, 10000);
Run Code Online (Sandbox Code Playgroud)

但是,这是不正确的,因为即使我导航到另一个“页面”(在 Angular SPA 中,所有内容都是一页,所以它实际上不是另一页),每 30 秒刷新一次。

仅在特定页面/组件上每 30 秒刷新一次数据的正确方法是什么?

javascript single-page-application angular

3
推荐指数
1
解决办法
6105
查看次数