angular - HttpParams 设置为空

标签 angular http

我有一个方法发布到我的本地项目,我正在使用 HttpParams()FormBuilder。到目前为止,这是我的代码:

表格:

<form [formGroup]="SearchForm" (ngSubmit)="search(SearchForm.value)" name="SearchForms">
<input type="text" class="form-input-text" formControlName="checkin" value="10:00" width="20" placeholder="10:00" readonly>
<input type="hidden" formControlName="location"  name="location" value="{{location}}">

组件.ts:

search(post) 
  {
    const params = new HttpParams().set('location',post.location).set('check_in',post.checkin);

    this.http.request(
            "POST",
            "http://localhost/bobobox/public/api/v1/room/search", 
            {
                responseType:"json",
                params
            })
        .subscribe(data => {
          console.log(data);
        });
  }

在控制台中:

POST http://localhost/bobobox/public/api/v1/room/search?location=null&check_in=null 405 (Method Not Allowed)

我得到 2 个错误。

  1. 发布数据 = null
  2. 不允许的方法

如何解决这个问题?

最佳答案

对于angular 7,8,如果你想在get request中发送参数, 您可以使用以下方式。此示例从服务器中提取针对某些特定用户的帖子。

post-store.ts 文件中,getHttpParams() 是我们构造参数的方法。

post-component.ts

import { Component, OnInit, Input } from '@angular/core';
import { OperationsService, PostStoreService, AuthService } from 'client/app/services';
import { Observable } from 'rxjs';

@Component({
  selector: 'app-posts',
  templateUrl: './posts.component.html',
  styleUrls: ['./posts.component.scss']
})
export class PostsComponent implements OnInit {

  posts$ : Observable<any>;

  constructor(private postStore : PostStoreService) { }

  ngOnInit() {
    this.posts$ = this.postStore.posts;
    this.postStore.getPosts('get-posts' , { userId : this.userId });
  }
}

post.component.html

 <div class="user-post clearfix" *ngFor="let post of posts$ | async; let i=index;">

    <div class="post-content">

        <div class="post-header">

            <div class="row no-gutters">

                <div class="col-6">
                    <div class="user-info">
                    <span class="user-name">{{ post?.user.completeName) }}</span>
                    <span class="user-tag">@{{ post?.user.userName}}</span>
                    </div>
                </div>

                <div class="col-6">
                    <div class="post-time-stamp text-right">
                        <span class="post-date">{{ post?.createdAt | date : 'mediumDate' }}</span>
                        <span class="post-time">{{ post?.createdAt | date : 'shortTime' }}</span>
                    </div>
                </div>

            </div>

        </div>

        <div class="post-text">
            <p>{{ post?.text}}</p>
        </div>

    </div>    
</div>

post-store.service.ts

import { Injectable } from '@angular/core';
import { HttpClient, HttpParams } from '@angular/common/http';
import { BehaviorSubject } from 'rxjs';
import { environment } from 'client/environments/environment';
import { Http_Headers } from 'client/app/helpers';
import { map } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class PostStoreService {

  private readonly dataSubject: BehaviorSubject<any>;
  private dataStore : { data : any };

  constructor(private http: HttpClient) { 
    this.dataSubject = <BehaviorSubject<any>>new BehaviorSubject([]);
    this.dataStore = { data: [] };
  }

  get posts() { return this.dataSubject.asObservable(); }

  /* MAKING GET CALL WITH HTTPCLIENT */  
  getPosts(end_point: string , params? : any){

    return this.http.get(`${environment.APIEndPoint + end_point}` , { headers : this.getHttpHeaders() , params : params ? this.getHttpParams( params ) : {} } )
                    .pipe(map((result : any) => result.response))
                    .subscribe(( data : any ) => {
                      console.log('Posts' ,data);
                      this.dataStore.data = data;
                      this.dataSubject.next( Object.assign( {} , this.dataStore).data);
                    },
                    error => console.error('Error' , error));
  }

 /* GETTING HTTPHEADERS */
 getHttpHeaders(): HttpHeaders {
   let headers : HttpHeaders = new HttpHeaders();
   if(localStorage.getItem(JWTOKEN))
   headers = headers.append('Authorization', localStorage.getItem(JWTOKEN));
   headers = headers.append('Access-Control-Allow-Origin', '*');
   headers = headers.append('Access-Control-Allow-Methods', 'OPTIONS, GET, POST, PUT, DELETE');
   headers = headers.append("Content-Type" ,  "application/json");
   headers = headers.append("Access-Control-Allow-Credentials" , "true");
   headers = headers.append('Access-Control-Allow-Headers', 'Origin, Content-Type, Accept, Access-Control-Allow-Origin');
   return headers;
}

/* GETTING HTTPPARAMS*/
getHttpParams(params : any) : HttpParams {
   let httpParams : HttpParams  = new HttpParams();
   Object.keys(params).forEach(key => { 
      httpParams = httpParams.append(key , params[key]);  
   });
    return httpParams;
  }
}

关于angular - HttpParams 设置为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48438636/

相关文章:

node.js - 如何在 NodeJs/Angular App Google App Engine 中强制 SSL

html - 尝试将属性绑定(bind)到 ng 模型时,如何修复类型 'bankCode' 上不存在 Angular 错误属性 'User'?

javascript - $ ('form' ).提交更改内容长度 header 并导致请求失败?

java - 在postman中可以命中,但在java中不行

http - Firefox 在 XHR 上将自定义 HTTP 方法 "LINK"覆盖为混合大小写 "Link"

mysql - 优化 Magento url 重写

Angular 2 : prevent form fields to become valid as long as async-validator is still running

javascript - 在 Angular/客户端项目中使用转换为 JavaScript 的 Kotlin 代码

组件中管道过滤器的 angular2 错误

php - 带有委托(delegate)的 PHP 中的异步 HTTP 请求