Angular2:如何在第2页获取第1页的表单验证状态?

Angular2: How to get form validation status of page 1 on page 2?

我在项目中使用Angular 4.2.x,它有2个页面:第1页有一个表格,第2页是一个摘要页。

验证第 1 页上的所有字段后,我在两个页面共享的服务中存储一个 true 标志。我希望在加载第 2 页时显示此标志,但是,尽管第 1 页已将此变量标记为 true,但它始终为 false。

Page1Component:

export class Page1Component implements OnInt {
   ngOnInit() {
      this.form1.valueChanges.subscribe(changes => {
         if (this.form1.invalid) {
           this.globalService.updatePageStatus(false);
         } else {
           this.globalService.updatePageStatus(true);
         }
      });
   }
}

全球服务:

export class GlobalService {
   isPageCompleted: false;

   updatePageStatus(isCompleted: boolean) {
     this.isPageCompleted = isCompleted;
     console.log("Is page 1 completed? " + this.isPageCompleted);
   }
}

Page2Component:

export class Page2Component implements OnInit {
   isPage1Completed = false;

   ngOnInit() {
      this.isPage1Completed = this.globalService.isPageCompleted;
      console.log("On page 2, is page 1 completed? " + this.isPage1Completed);
   }
}

并且Page1Component和Page2Component在不同的模块中,是懒加载的。在浏览器控制台中,我可以看到“第 1 页是否完成?true”,但是当导航到第 2 页时,它显示“在第 2 页,第 1 页是否已完成?假".

有什么想法吗?谢谢!

您是否将 'GlobalService' 用作单例?如果你在 Page2Component 中导入它,它将创建一个新服务而不是一个单例,这将为你提供 'isPageCompleted' 的默认值,即 false。

而是将其导入到您的模块中,而不是组件中。

您一定已经在两个组件中创建了单独的服务实例(在两个组件中都使用了装饰性 属性)。

仅创建单个实例(在模块中使用它而不是 class 作为提供者)。这应该可以解决您的问题。