Return URL 参数对象 ANGULAR 6
Return URL Parameter objects ANGULAR 6
我想查看在上一个屏幕上选择的计划数据,然后提交包含所有数据的表单。在 Angular 中执行此操作的最佳方法是什么?
正如您在控制台中看到的那样,它在参数中显示的是对象而不是实际数据。
import { FormModel } from './../../shared/model';
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { ApiService } from './../../shared/api.service';
@Component({
selector: 'app-form',
templateUrl: './form.component.html',
styleUrls: ['./form.component.css']
})
export class FormComponent implements OnInit {
query: any;
form: FormModel;
constructor(
public apiService: ApiService,
public actRoute: ActivatedRoute,
public router: Router
) {
this.form = new FormModel();
}
ngOnInit() {
this.query = this.actRoute.queryParams.subscribe(params => {
console.log(params);
});
}
enviar(): void {
console.log(this.form);
this.resetForm();
}
resetForm() {
this.form = new FormModel();
}
}
直接在 link 上向页面传递参数。
<h2>Escolha um plano</h2><br>
<div class="row">
<div class="col-md-4" *ngFor="let pl of planoTablet.planos" #card>
<div class="card w-100">
<div class="card-body">
<div class="float-left">
<h5 class="card-title">{{ pl.franquia }}</h5>
<p class="card-text">R$ {{ pl.valor }}</p>
</div>
<a routerLink="/plataformas/planos/form/{{pl.sku}}/"
[queryParams]="planoTablet.planos" class="btn btn-danger btn-
lg float-right mt-2" [ngClass]="{'disabled': pl.ativo ==
false}">Contratar</a>
</div>
</div><br>
</div>
</div>
目标是显示之前选择的计划中的数据
将复杂(嵌套)对象传递给您通常不是一个好主意url,因为它们可能没有正确编码。我更好的方法是创建一个服务来在组件之间共享数据。
简单(平面)对象:
如果您使用简单(平面)对象通过 queryParams
发送,那很好。
您可以这样发送它们:
<a routerLink="yourRoute" [queryParams]="{param1: 'hello', param2: 'world'}">Contratar</a>
复杂对象
对于复杂的对象,您可以创建服务。应该是这样的:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class SharingService {
sharingObject: any;
constructor() { }
set sharedValue(obj) {
this.sharingObject = obj
}
get sharedValue() {
return this.sharingObject
}
}
我已经为您创建了一个 demo,它使用服务在组件之间共享数据
希望对您有所帮助。
我想查看在上一个屏幕上选择的计划数据,然后提交包含所有数据的表单。在 Angular 中执行此操作的最佳方法是什么?
正如您在控制台中看到的那样,它在参数中显示的是对象而不是实际数据。
import { FormModel } from './../../shared/model';
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { ApiService } from './../../shared/api.service';
@Component({
selector: 'app-form',
templateUrl: './form.component.html',
styleUrls: ['./form.component.css']
})
export class FormComponent implements OnInit {
query: any;
form: FormModel;
constructor(
public apiService: ApiService,
public actRoute: ActivatedRoute,
public router: Router
) {
this.form = new FormModel();
}
ngOnInit() {
this.query = this.actRoute.queryParams.subscribe(params => {
console.log(params);
});
}
enviar(): void {
console.log(this.form);
this.resetForm();
}
resetForm() {
this.form = new FormModel();
}
}
直接在 link 上向页面传递参数。
<h2>Escolha um plano</h2><br>
<div class="row">
<div class="col-md-4" *ngFor="let pl of planoTablet.planos" #card>
<div class="card w-100">
<div class="card-body">
<div class="float-left">
<h5 class="card-title">{{ pl.franquia }}</h5>
<p class="card-text">R$ {{ pl.valor }}</p>
</div>
<a routerLink="/plataformas/planos/form/{{pl.sku}}/"
[queryParams]="planoTablet.planos" class="btn btn-danger btn-
lg float-right mt-2" [ngClass]="{'disabled': pl.ativo ==
false}">Contratar</a>
</div>
</div><br>
</div>
</div>
目标是显示之前选择的计划中的数据
将复杂(嵌套)对象传递给您通常不是一个好主意url,因为它们可能没有正确编码。我更好的方法是创建一个服务来在组件之间共享数据。
简单(平面)对象:
如果您使用简单(平面)对象通过 queryParams
发送,那很好。
您可以这样发送它们:
<a routerLink="yourRoute" [queryParams]="{param1: 'hello', param2: 'world'}">Contratar</a>
复杂对象
对于复杂的对象,您可以创建服务。应该是这样的:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class SharingService {
sharingObject: any;
constructor() { }
set sharedValue(obj) {
this.sharingObject = obj
}
get sharedValue() {
return this.sharingObject
}
}
我已经为您创建了一个 demo,它使用服务在组件之间共享数据
希望对您有所帮助。