35431


ブラウザのBackボタンが押されたことを検知するためにLocationクラスを使用しています。  
<https://angular.io/docs/ts/latest/api/common/index/Location-class.html>

[code]

    export class PathLocationComponent {
      location: Location;
      constructor(location: Location) { 
         location.subscribe(val => console.log(val))//output popstate
      }
    }
    
[/code]

しかしながらこのコードで「戻る」と「進む」を繰り返すと出力されるログの数が増えて行ってしまいます。  
Location.subscribe()がリークしているものと思われますが、Location.unsubscribe()がないので解放の仕方もわかりません。

リークを防ぐ方法もしくは、subscribeを解放する方法はありますでしょうか。

* * *

PlatformLocation.onPopState().というメソッドもありますが  
<https://angular.io/docs/ts/latest/api/common/index/PlatformLocation-
class.html>

ドキュメントで以下の様に言われてしまっています。

[code]

    This class should not be used directly by an application developer. Instead, use Location.
    
[/code]


CC BY-SA 3.0
2017-06-09T07:05:56.033
35430
2017-06-09T07:25:09.527
19716
question
angular2 angular4
Location.subscribe()がリークしてしまう


SOen側で回答頂きました。

[code]

    import {Subscription} from 'rxjs/Subscription';
    
    export class PathLocationComponent implements OnDestroy {
    location: Location;
    private subscription: Subscription;
    
          constructor(location: Location) {
            this.subscription = <Subscription>location.subscribe(val => console.log(val))//output popstate
          }
    
         ngOnDestroy(): void {
            this.subscription.unsubscribe();
         }
    }
    
[/code]


CC BY-SA 3.0
2017-06-09T07:25:09.527
35431
2017-06-09T07:25:09.527
19716
35430
answer