首页 > 解决方案 > 页面离开时角度服务破坏

问题描述

我有一项服务,TransactionsProvider它包含在页面模块中:

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    IonicModule,
    SharedModule,
  ],
  declarations: [
    ClientDetailPage,
  ],
  providers: [
    TransactionsProvider,
  ],
  exports: [
  ]
})
export class ClientDetailPageModule {}

然而,我的TransactionsProvider工具在被破坏OnDestroy时似乎并没有ClientDetailPage被破坏。

@Injectable()
export class TransactionsProvider implements OnDestroy {

  base_url: string;
  auth_token: string;

  purchased_weeks = new BehaviorSubject(<number>0);
  purchased_weeks$ = this.purchased_weeks.asObservable()

  purchases$: Observable<ITransaction[]>;
  payments$: Observable<ITransaction[]>;

  constructor(private globalVarService: GlobalsService,
              private commentsService: CommentsProvider,
              private http: HttpClient ) {
    this.base_url = this.globalVarService.base_url;
  }

  ngOnDestroy(): void {
    console.log("destroy txn service")
  }

  ...

}

我从来没有destroy txn service在控制台中看到过,所以我认为服务没有被破坏。当页面被破坏时,我需要做什么才能使我的服务被破坏?

标签: angular

解决方案


它取决于依赖注入。对于服务,您在所有应用程序的所有模块 o 中使用相同的实例(如果您在根目录中使用提供)。要仅为您的组件使用服务实例,您必须将其声明为组件的提供者。你可以这样做:

 @Component({
  selector: 'app-selector',
  templateUrl: './my-app.component.html',
  styleUrls: ['./my-app.component.css'],
  providers: [TransactionsProvider]
})

推荐阅读