【问题标题】:angular 5 before route from one component to another how to save component form data从一个组件路由到另一个组件之前的角度 5 如何保存组件表单数据
【发布时间】:2018-11-12 03:45:37
【问题描述】:

我正在尝试将一个组件路由到另一个组件;每个组件都有一些表单数据(this.formBuilder.group)。当我从一个组件导航到另一个组件时,如果我回到前一个组件,则不会恢复填充的数据。

在为每个组件路由之前,有什么方法可以保存数据吗?在离开组件以保存所有表单数据之前,是否有任何生命周期方法可以检测?

navigation.ts:
    if(currentNav == "Personal Details"){
      this.router.navigateByUrl('/understand/personal');
    } else if(currentNav == "Contact Details"){
      this.router.navigateByUrl('/understand/contact');
    }

contact.ts
ngOnInit() {
    this.contactDetails = this.formBuilder.group({
      email: ['', [Validators.required, Validators.email]],
      mobileNumber: ['', Validators.required],
      secondaryNumber: ['', Validators.required]
   });
  }

personal.ts
    this.personalDetails = this.formBuilder.group({
      country: ['', Validators.required],
      countryOfIssue: ['', Validators.required],
      countryOfBirth: ['', Validators.required]
       });
      }

【问题讨论】:

  • 访问此 url 以获取路由事件angular.io/api/router/Event 您需要将表单数据存储在临时内存中。当您回来时,您需要读取存储的数据并重新分配给表单。

标签: angular angular5


【解决方案1】:

将每个组件中捕获的数据保存在全局服务中,并在来回移动时恢复相同。您可以在构造函数或 ngOnInit 方法中分配全局服务对象。如下所示:

home.component.ts

import { Component, OnInit, OnDestroy } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { GlobalService } from'../global.service';

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit, OnDestroy {
  homeDetails: FormGroup;

  constructor(private formBuilder: FormBuilder,private globalService: GlobalService) {

    this.homeDetails = this.formBuilder.group({
      homename:['', Validators.required]
    });

   }

  ngOnInit() {
      if(this.globalService.homeDetails){
        this.homeDetails = this.globalService.homeDetails;
      }
  }


  ngOnDestroy() {
    this.globalService.homeDetails = this.homeDetails;

  }

}

global.service.ts

import { FormGroup } from '@angular/forms';
import { Injectable } from '@angular/core';

@Injectable()
export class GlobalService {
  public homeDetails: FormGroup;
  public aboutDetails: FormGroup;
}

您可以在移至另一个组件之前查看 OnDestroy 以实现任何代码。

更新:根据 stackblitz url 的 home.component.ts 和 global.service.ts 代码

【讨论】:

  • 你能分享任何小提琴的例子吗?
  • user3392782: - 这里我尝试创建服务,请帮忙更新stackblitz.com/edit/…
  • 我无法保存 stackblitz 编辑。已根据所需的更改更新了我的答案。
  • 哇。它完全符合我的预期......非常感谢,请找到我更新的 sackblits....stackblitz.com/edit/angular-router-example-nufsnz?file=app/…
  • 您必须从全球服务中提取所需的数据并构建相应的发布请求。它相当标准。不确定您需要什么帮助。
【解决方案2】:

除了生命周期方法,您可能会决定在退出组件上使用 CanDeactivate Route Guard,它使您能够添加诸如保存和取消之类的功能。有关信息,请尝试https://v5.angular.io/guide/router#candeactivate-handling-unsaved-changes

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-10-18
  • 2019-11-14
  • 2019-10-10
  • 2018-09-20
  • 2017-12-27
  • 2023-04-10
  • 2019-08-03
相关资源
最近更新 更多