最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

html - How to save the value of textbox with dynamic route data into database? - Stack Overflow

programmeradmin1浏览0评论

Tagid and typename textboxes are currently holding routed values from customer component, but are not being saved into the database when I clicked on save button. In other words, routing the dynamic data from customer component to details component textboxes were successfully, but they are not saving in the database. It is showing null in their respective fields in the database table. My requirement is to save the dynamic route data in typename and tagid textbox into database using Ng Form. Below are methods I had tried.

group1 textbox

Textbox1         Textbox2     
tagid= '103',    Typename= 'Store keeping', 

CustomerComponent.ts

onClick2(event: MouseEvent, data: any) {
  this.router.navigate(['/details'], { queryParams: { tagid: data.TagId, typename: data.Typename} 
});

DetailsComponent.ts

public typename: string;
public tagid: string;

ngOnInit() {
  this.route.queryParams.subscribe((params) => {
    this.tagid = params['tagid'];
    this.typename= params['typename'];      
  });
}

onSubmit(form: NgForm){
this.service.formSubmitted = true;    

//appetite 
if (form.valid) {
  this.service.postappetite()
  .subscribe({next: res => {        
    console.log(res);
    this.toastr.success('Saved Successful');     
      
  },
  
  error: err => {console.log(err)}
  })
}
else {
  this.toastr.error('Please Enter Your Data ');
}
}

Details html

<form id="formId" #form="ngForm" (submit)="onSubmit(form)">
  <input  id="Typename" name="Typename" [ngModel]="typename" [(ngModel)]="service.formappetite.Typename">    
  <input  id="TagId" name="TagId"  [ngModel]="tagno" [(ngModel)]="service.formappetite.TagId">   
            
  <button type="submit" >Save</button>
</form>

service.ts

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { DataMeasure} from './data-model'; 

@Injectable({
providedIn: 'root'})

export class MeasurelService {
  public typename: string;
  public tagid: string;

  constructor(private http:HttpClient) { }

  formappetite:DataMeasure = new DataMeasure();

  formSubmitted: boolean = false;  
  readonly baseurlanimal = 'api/InventoryAPI'

  postappetite(tagno: string, animal: string){
    return this.http.post(this.baseurlanimal, this.formappetite);
  }

}

Expected output

TagId Typename
101 Dairy
102 Sales

Tagid and typename textboxes are currently holding routed values from customer component, but are not being saved into the database when I clicked on save button. In other words, routing the dynamic data from customer component to details component textboxes were successfully, but they are not saving in the database. It is showing null in their respective fields in the database table. My requirement is to save the dynamic route data in typename and tagid textbox into database using Ng Form. Below are methods I had tried.

group1 textbox

Textbox1         Textbox2     
tagid= '103',    Typename= 'Store keeping', 

CustomerComponent.ts

onClick2(event: MouseEvent, data: any) {
  this.router.navigate(['/details'], { queryParams: { tagid: data.TagId, typename: data.Typename} 
});

DetailsComponent.ts

public typename: string;
public tagid: string;

ngOnInit() {
  this.route.queryParams.subscribe((params) => {
    this.tagid = params['tagid'];
    this.typename= params['typename'];      
  });
}

onSubmit(form: NgForm){
this.service.formSubmitted = true;    

//appetite 
if (form.valid) {
  this.service.postappetite()
  .subscribe({next: res => {        
    console.log(res);
    this.toastr.success('Saved Successful');     
      
  },
  
  error: err => {console.log(err)}
  })
}
else {
  this.toastr.error('Please Enter Your Data ');
}
}

Details html

<form id="formId" #form="ngForm" (submit)="onSubmit(form)">
  <input  id="Typename" name="Typename" [ngModel]="typename" [(ngModel)]="service.formappetite.Typename">    
  <input  id="TagId" name="TagId"  [ngModel]="tagno" [(ngModel)]="service.formappetite.TagId">   
            
  <button type="submit" >Save</button>
</form>

service.ts

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { DataMeasure} from './data-model'; 

@Injectable({
providedIn: 'root'})

export class MeasurelService {
  public typename: string;
  public tagid: string;

  constructor(private http:HttpClient) { }

  formappetite:DataMeasure = new DataMeasure();

  formSubmitted: boolean = false;  
  readonly baseurlanimal = 'api/InventoryAPI'

  postappetite(tagno: string, animal: string){
    return this.http.post(this.baseurlanimal, this.formappetite);
  }

}

Expected output

TagId Typename
101 Dairy
102 Sales
Share Improve this question edited Mar 12 at 12:25 Samal asked Mar 12 at 10:47 SamalSamal 756 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 1

Instead of storing the form properties on the service, store them on the form itself. This is better because your state is located in the component and keeps your service clean when you are using multiple components. The form controls should only exist on the component level, since there is no reason to share them, if you want to share the property (between components) only then it should be kept on the service level.

public typename: string;
public tagid: string;

ngOnInit() {
  this.route.queryParams.subscribe((params) => {
    this.tagid = params['tagid'];
    this.typename= params['typename'];      
  });
}

onSubmit(form: NgForm){
this.service.formSubmitted = true;    

//appetite 
if (form.valid) {
  this.service.postappetite(this.tagid, this.typename)
  .subscribe({    
    next: res => {        
      console.log(res);
      this.toastr.success('Saved Successful');  
    },
    error: err => {console.log(err)}
  })
}
else {
  this.toastr.error('Please Enter Your Data ');
}

Update the HTML like below.

<form id="formId" #form="ngForm" (ngSubmit)="onSubmit(form)">
  <input  id="Typename" name="Typename" [(ngModel)]="typename">    
  <input  id="TagId" name="TagId" [(ngModel)]="tagid">   
            
  <button type="submit" >Save</button>
</form>

Please update the service to accept the component values.

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { DataMeasure} from './data-model'; 

@Injectable({
providedIn: 'root'})

export class MeasurelService {
  public animal: string;
  public tagno: string;

  constructor(private http:HttpClient) { }


  formSubmitted: boolean = false;  
  readonly baseurlanimal = 'api/InventoryAPI'

  postappetite(tagid: string, typename: string){
    const formappetite: DataMeasure = new DataMeasure();
    formappetite.tagid = tagid;
    formappetite.typename = typename;
    return this.http.post(this.baseurlanimal, formappetite);
  }

}
发布评论

评论列表(0)

  1. 暂无评论