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

primeng - Fill form with URL parameters in Angular 19 - Stack Overflow

programmeradmin1浏览0评论

I have a form and researching here discovered a way to check whether the form is valid or not and to put your data in the URL when submitted. However, if you open another page with the parameters in the URL, the form is not filled in automatically. I would like to know how I can fill it in immediately after the page is loaded. I'm not sure if I have to handle this in the routes or in the typescript.

also the problem of objects being sent in their entirety in the URL

note: Angular/primeng 19

ValidForm() {
    if (this.form.valid) {
      console.log('form valid')
      const queryParams = { ...this.form.value };
      console.log(queryParams)
      this.router.navigate([''], {
        queryParams: queryParams,
        queryParamsHandling: 'merge',
      });
    } else {
      console.log('Form invalid!');

    }
  }

Below is the repository link with the code:

I have a form and researching here discovered a way to check whether the form is valid or not and to put your data in the URL when submitted. However, if you open another page with the parameters in the URL, the form is not filled in automatically. I would like to know how I can fill it in immediately after the page is loaded. I'm not sure if I have to handle this in the routes or in the typescript.

also the problem of objects being sent in their entirety in the URL

note: Angular/primeng 19

ValidForm() {
    if (this.form.valid) {
      console.log('form valid')
      const queryParams = { ...this.form.value };
      console.log(queryParams)
      this.router.navigate([''], {
        queryParams: queryParams,
        queryParamsHandling: 'merge',
      });
    } else {
      console.log('Form invalid!');

    }
  }

Below is the repository link with the code: https://github/ViniciusDevelopment/modelo19

Share Improve this question edited Jan 17 at 19:16 ViniciusDevelopment asked Jan 17 at 18:38 ViniciusDevelopmentViniciusDevelopment 1559 bronze badges 2
  • What have you tried so far? Can you include a minimal, reproducible example or include the problem code? I'd like to help, but I don't have the time to look through your entire repo. – nll_ptr Commented Jan 17 at 19:08
  • I researched a lot but I didn't find any documentation on how to do this in the last 3 versions of Angular, only in very old versions that are no longer available. – ViniciusDevelopment Commented Jan 17 at 19:15
Add a comment  | 

1 Answer 1

Reset to default 0

You can use Angular ActivatedRoute along with ngOnInit life cycle hook for you benifit in your case. In your component inject the activated route to your constructor and in the ngOnInit life cycle check if the the route incoming has parameters if so set the values to the form, else keep it fresh form. on clicking submit ValidForm sumbmitting parse respective data through the URL parameters or pass the data to the API.

Refer the code below for reference:

import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';

@Component({
  selector: 'app-my-form',
  templateUrl: './my-formponent.html',
  styleUrls: ['./my-formponent.css']
})
export class MyFormComponent implements OnInit {
  form: FormGroup;

  constructor(
    private fb: FormBuilder,
    private route: ActivatedRoute, // Inject AcitvatedRoute here
    private router: Router
  ) {

    this.form = this.fb.group({ // Initialize the form
      details: [''], // Field that could store serialized object data
    });
  }

  ngOnInit(): void {
    this.route.queryParams.subscribe((params) => { // Read query parameters
      for (const key in params) {
        if (this.form.contains(key)) {
          try { 
            this.form.get(key)?.setValue(JSON.parse(params[key]));
          } catch {
            this.form.get(key)?.setValue(params[key]); // Set the value to form
          }
        }
      }
    });
  }

  ValidForm(): void {
    if (this.form.valid) {
      console.log('Form is valid');
      const queryParams: any = { ...this.form.value }; // Get query params

      for (const key in queryParams) {
        if (typeof queryParams[key] === 'object') {
          queryParams[key] = JSON.stringify(queryParams[key]);
        }
      }
      
      this.router.navigate([''], { // Navigate and update the URL with form data
        queryParams: queryParams,
        queryParamsHandling: 'merge', // Keeps existing query params
      });
    } else {
      console.log('Form is invalid');
    }
  }
}
发布评论

评论列表(0)

  1. 暂无评论