一旦我离开视图并重新进入,可观察到的离子 4 角路线不起作用

Posted

技术标签:

【中文标题】一旦我离开视图并重新进入,可观察到的离子 4 角路线不起作用【英文标题】:ionic 4 angular route observable not working once I leave the view and re-enter 【发布时间】:2019-03-08 22:59:21 【问题描述】:

我有一个设置,在一个 ionic 4 页面中,我根据查询参数显示多个项目。考虑一个具有不同类别和 onclick 的列表,我将更新查询参数。

所以我有一个可观察的

this.route.queryParamMap.subscribe((data) => 
  console.error('in subscribe', data);
  this.updateCategories(data['params']);
);

当我第一次访问页面时,这很好用。但是当我导航到其他页面然后返回时,上述代码中的console.error 停止工作。

如果我是正确的,路由上的 observables 会被 angular 自毁(我也尝试在 ngOnDestroy 上取消订阅,然后再次订阅)。当我再次回来时,它应该订阅路由的 queryParamMap 并像以前一样工作。

我正在使用带有 Angular 6.0.8 的 ionic 4 beta 12。任何想法为什么会发生这种情况?

【问题讨论】:

你解决了吗?我也面临同样的问题,找不到解决办法。 【参考方案1】:

您是在 OnInit 方法中订阅还是在其他地方订阅?我尝试了您的示例代码,它在我的本地运行良好:

app.routing.ts

import  Routes, RouterModule  from '@angular/router';
import  ModuleWithProviders  from '@angular/core';

import  ParentComponent  from './parent.component';
import  NewRouteComponent  from './new-route.component';

export const routes: Routes = [
   path: '', component: ParentComponent ,
   path: 'parent', component: ParentComponent ,
   path: 'newroute', component: NewRouteComponent 
];

export const routing: ModuleWithProviders = RouterModule.forRoot(routes);

parent.component.ts

import  Component, OnInit  from '@angular/core';
import  ActivatedRoute  from '@angular/router';

@Component(
  selector: 'app-parent',
  template: `<a routerLink="../newroute">Click here</a>`,
  styleUrls: ['./parent.component.css']
)
export class ParentComponent implements OnInit 
  constructor(private activatedRoute: ActivatedRoute)  

  ngOnInit() 
    this.activatedRoute.queryParamMap.subscribe((data) => 
      console.error('in subscribe', data);
    );
  


new-route.component.ts

import  Component, OnInit  from '@angular/core';
import  Router  from '@angular/router';

@Component(
  selector: 'app-new-route',
  template: `<p>new-route works!</p>
  <button (click)="goBack()">Back</button>`,
  styleUrls: ['./new-route.component.css']
)
export class NewRouteComponent implements OnInit 

  constructor(private activatedRoute: Router)  

  ngOnInit() 

  goBack() 
    this.activatedRoute.navigate(['./parent']);
  

【讨论】:

我尝试使用 ngOnInit、构造函数和 ionic ionViewWillEnter、ionViewDidEnter。当然不是同时,分开。代码设置类似,但不起作用。一旦我回到父级,它只会从订阅内部停止控制台日志。我会尝试在github上放一个例子。

以上是关于一旦我离开视图并重新进入,可观察到的离子 4 角路线不起作用的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift - 来自可观察到的忽略错误的驱动程序

在 ViewController 中可观察到的单元测试 RxSwift

集合视图单元格内容是分层的

从可观察到的返回数据的角度 forEach 循环(Firebase 驱动)

已发布/观察到的 var 在视图 swiftui 中未更新,带有调用函数

如何在打字稿上重新连接(重新订阅)到 websocket