javascript - 如何以角度将表单数据从一个组件保存到另一个组件?
问题描述
我只需要使用@Input、@output、路由、激活路由。
有 2 个分量,即addbook
和showbook
。
addbook
组件有一个带有提交按钮的表单,它应该保存所有表单数据。
showbook
组件应该只显示表单数据。
这两个组件放置在锚标记的导航栏中。一个是addbook
anchor,它显示表单,当你提交表单时,它应该持久化数据(保存它)。
最后,当您单击显示书锚标记时,它应该显示表单数据。
我想出了什么 - 我使用了一个模板驱动的表单,它在提交时会调用一个
function { this.route.navigate(['showbook',bookID])}
现在我在 routerModule.forRoot([routes]) 中将路径作为 showbook/:id 和组件作为 showbook 导入,在showbook
组件中,我使用了 activateRoute 来获取参数,并使用它显示了表单数据。
RouterModule.forRoot([{path:'showbook/:id',component:showBookComponent}]) // in app module ts
this.activatedRoute.params.subscribe(params=>{
this.bookId = params['id']
})
我的代码在提交后立即显示表单数据,但要求是我应该保存数据,并且showbook
单击时应该显示表单数据。
我不允许使用本地存储。
解决方案
您可以service
用于此目的。
- 表格填写
addbook
并保存后,将数据存储在服务中。 - 当您导航到 时
showbook
,从服务中检索数据。
例子:
数据服务.ts
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class DataService {
formData: Object;
constructor() { }
//assign the value
setFormData(data){
this.formData = data;
}
//To get the value
getFormData(){
return this.formData ;
}
}
在addbook.component.ts
首先导入服务。
import { DataService } from '../../data.service';
在构造函数中注入服务
constructor(private dataService: DataService){}
在您的保存按钮功能上
this.dataService.setFormData(data);
在showbook.component.ts
首先导入服务。
import { DataService } from '../../data.service';
在构造函数中注入服务
constructor(private dataService: DataService){}
在 init 函数上显示表单数据
ngOnInit(): void {
this.formData = this.dataService.getFormData();
}
推荐阅读
- python - 如何打印完整的金字塔?
- laravel-5 - 如何在 Laravel 的表中针对 json 编码数组检查字符串?
- c# - webservice保存文件后服务器刷新页面
- python - 如何使用 tensorflow 实现 keras 激活功能?
- abap - 如何在电子邮件中附加图片?
- c# - 泛型发生在 GDI+
- php - json_encode 不接受列或特殊章程或空白
- excel - 用于替换表中的值的宏
- kubernetes - 在私有 vpc 和 NAT 中连接 GCP Kubernetes
- flutter - Flutter - 在 pubspec.yaml 中添加 pub 包