You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中如何将组件输入框数据传递至服务用于POST请求

解决Angular中HTTP POST请求传递输入框值的问题

看起来你已经搞定了输入框值的获取,核心问题出在服务里的POST请求参数传递逻辑,还有组件里的一些小细节,我一步步帮你修正:

1. 修正服务中的POST请求参数顺序

Angular(老版本如Angular 4/5)的Http.post方法参数规则是:post(url: string, body: any, options?: RequestOptionsArgs),你现在错误地把userId和postdata当成了两个独立参数传递,正确的做法是把用户ID合并到请求体里,再按规则传参。

修改service.ts的getValidUser方法:

getValidUser(userId: string): Observable<Response>{
  // 将输入的用户ID合并到请求体数据中
  let postdata = { 
    'isContractor': false, 
    "assetNo" : "", 
    "assetType" : "", 
    "ifAnycustodian" : "",
    "userId": userId // 新增这一行,把用户ID加入请求体
  };
  let headers = new Headers({ 'Content-Type': 'application/json' });
  let options = new RequestOptions({ headers: headers });
  // 按正确顺序传递参数:url、请求体、请求选项
  return this.http.post('http://localhost:60623/AssetServices.svc/ValidUser/', postdata, options)
    .map((res:Response) => res.json())
    .catch((error:any) => Observable.throw(error.json().error || 'Server error'));
}

2. 补全组件变量声明与响应解析逻辑

你的组件里用了validuser和isval但没提前声明,而且后端返回的IsUserValidResult是JSON字符串,需要二次解析才能拿到结构化数据:

修改component.ts:

import { Component, OnInit} from '@angular/core';
import {MatDialog} from '@angular/material';
import { FileUploader } from 'ng2-file-upload';
const URL = 'https://evening-anchorage-3159.herokuapp.com/api/';
import{AssetService} from './asset.service';
import {KeysPipe} from './keys.pipe';
import {ObjtoarrPipe} from './objtoarr.pipe';
import { Observable } from 'rxjs/Observable'; // 别忘了引入Observable

@Component({
  selector: 'app-my-asset-page',
  templateUrl: './my-asset-page.component.html',
  styleUrls: ['./my-asset-page.component.css']
})
export class MyAssetPageComponent implements OnInit {
  public empno : string;
  // 声明缺失的变量
  public validuser: any;
  public isval: any;

  onKey(value: string) {
    this.empno = value;
    console.log(this.empno);
  }

  constructor(private assetser : AssetService) { }

  ngOnInit() {
    // 组件初始化逻辑(按需添加)
  }

  validateuser() {
    // 先判断输入是否为空,避免无效请求
    if (!this.empno) {
      console.log('请输入员工编号/邮箱/AD ID');
      return;
    }
    this.assetser.getValidUser(this.empno).subscribe(res=> {
      this.validuser = res;
      // 解析返回结果中的JSON字符串
      this.isval = JSON.parse(this.validuser.IsUserValidResult);
      console.log(this.isval);
    }, error => {
      console.error('请求出错:', error);
    });
  }
}

3. 简化HTML的事件绑定

你同时用了(keyup)和[(ngModel)],其实双向绑定已经能自动同步输入值,不需要额外的onKey方法,可以简化:

<div class="col-xs-12 col-lg-6 col-md-6 col-sm-6 no_pad">
  <label class="col-xs-12 no_pad">Primary user</label>
  <form class="col-xs-12 pdngLeft0 example-form">
    <mat-form-field class="col-xs-12 no_pad example-full-width">
      <input matInput placeholder="Enter employee no/email ID/AD ID" 
             (change)="validateuser()" 
             name="empno" 
             [(ngModel)]="empno" 
             class="col-xs-12 no_pad">
    </mat-form-field>
  </form>
</div>

现在测试一下:输入框的值会通过双向绑定同步到empno,触发change事件后,组件会把empno传给服务,服务将其打包进请求体发送给后端,最后能正确解析返回的用户数据啦~

内容的提问来源于stack exchange,提问作者nikhil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:51:44