web-dev-qa-db-fra.com

L'argument de type '{header: Header;}' n'est pas assignable au paramètre de type 'RequestOptionsArgs'

Erreur d’obtention de l’erreur suivante lors de la tentative d’en-tête dans la requête HTTP.POST/GET Argument of type '{header:Header;}' is not assignable to parameter of type 'RequestOptionsArgs'. Property 'null' is missing in the type '{header:Header;}'

J'ai essayé beaucoup de solutions mais pas de verrouillage.

voici mon code: 

import { Injectable } from '@angular/core';
import { Response, RequestOptions, Headers, Http, URLSearchParams} from '@angular/http';
import { Observable, Subject } from 'rxjs/Rx';  
import {Company} from './companyMaster';
import 'rxjs/add/operator/map';
import "rxjs/Rx";
import 'rxjs/add/operator/toPromise';
import {CommonService} from '../../common.service';
@Injectable()
export class CompanyMasterService {
private GetListActionUrl: string;
private AddEditActionUrl: string;
public headers = new Headers({ 'Content-Type': 'application/json' });
public options = new RequestOptions({ headers: this.headers });
commonService: CommonService;
constructor(private _http: Http) {
    this.commonService = new CommonService();
    this.GetListActionUrl = this.commonService.RootURL + 'Company/GetList';
    this.AddEditActionUrl = this.commonService.RootURL + "Company/AddEdit";
}

private RegenerateData = new Subject<number>();
// Observable string streams
RegenerateData$ = this.RegenerateData.asObservable();

GetList(): Promise<Company[]> {
    return this._http.get(this.GetListActionUrl + "?branchId=" + this.commonService.BranchId)
        .toPromise()
        .then(response => this.extractArray(response))
        .catch();
}

AddEdit(company: Company): any {
    let headers = new Headers({ 'content-type': 'application/json' });
    let body = JSON.stringify({
        'BRANCH_ID': company.BRANCH_ID.toString(),
        'COMPANY_ID': company.COMPANY_ID != null ? company.COMPANY_ID.toString() : null, 'COMPANY_NAME': company.COMPANY_NAME
    });
    let options = new RequestOptions({ headers: headers});

   return this._http.post(this.AddEditActionUrl, body, options)
        .toPromise()
        .then(response => this.extractArray(response))
        .catch();
}

protected extractArray(res: Response, showprogress: boolean = true) {
    let data = res.json();

    return data || [];
}

private getHeaders() {
    // I included these headers because otherwise FireFox
    // will request text/html instead of application/json
    let headers = new Headers();
    headers.append('Accept', 'application/json');
    return headers;
}

}

Voir le code ci-dessus, j'ai passé l'en-tête dans la méthode AddEdit (), mais il montre l'erreur ci-dessus, j'ai essayé plusieurs solutions comme:

  • Package de mise à jour
  • Importé @ angulaire/http
  • Essayé différentes façons de passer l'en-tête Essayé cette solution

j'ai joint une capture d'écran montrant une erreur dans Visual Studio IDE. Voir pièce jointe erreur capture d'écran Veuillez répondre dès que possible.

package.json

{
  "name": "sb-admin-angular4-bootstrap4",
  "version": "1.0.0",
  "license": "MIT",
  "scripts": {
    "ng": "ng",
    "start": "ng serve --ec=true",
    "build": "ng build --prod",
    "gitbuild": "ng build --prod --base='/start-angular/SB-Admin-BS4-Angular-4/master/dist/'",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/common": "^4.0.0",
    "@angular/compiler": "^4.0.0",
    "@angular/core": "^4.0.0",
    "@angular/forms": "^4.0.0",
    "@angular/http": "^4.0.0",
    "@angular/platform-browser": "^4.0.0",
    "@angular/platform-browser-dynamic": "^4.0.0",
    "@angular/router": "^4.0.0",
    "@ng-bootstrap/ng-bootstrap": "^1.0.0-alpha.25",
    "@ngx-translate/core": "^6.0.1",
    "@ngx-translate/http-loader": "0.0.3",
    "core-js": "^2.4.1",
    "font-awesome": "^4.7.0",
    "ionicons": "^3.0.0",
    "ng2-charts": "^1.5.0",
    "rxjs": "^5.1.0",
    "typing": "^0.1.9",
    "zone.js": "^0.8.4"
  },
  "devDependencies": {
    "@angular/cli": "^1.1.3",
    "@angular/compiler-cli": "^4.0.0",
    "@types/jasmine": "2.5.38",
    "@types/node": "~6.0.60",
    "codelyzer": "~2.0.0",
    "jasmine-core": "~2.5.2",
    "jasmine-spec-reporter": "~3.2.0",
    "karma": "~1.4.1",
    "karma-chrome-launcher": "~2.0.0",
    "karma-cli": "~1.0.1",
    "karma-coverage-istanbul-reporter": "^0.2.0",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "karma-phantomjs-launcher": "^1.0.4",
    "protractor": "~5.1.0",
    "ts-node": "~2.0.0",
    "tslint": "~4.5.0",
    "TypeScript": "~2.2.0",
    "webpack": "^3.0.0"
  }
}
4
Gawade Pavan

J'ai finalement résolu le mien en sautant l'objet RequestOptions.
J'utilise Angular 4, donc ce peut être différent pour moi, mais je crée un objet non typé et le passe dans la fonction méthode http ... - 

import { Identifiable, RestRepositoryService, HalResponse } from '../spring-data/rest-repository.service';
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { ContentTemplate } from '../content-template/content-template.service';

export class ContentItem extends HalResponse {
  id: string;
  name: string;
  description?: string;
  fieldValues: any;
  template: any;
  contentType: any;
}

@Injectable()
export class ContentItemService extends RestRepositoryService<ContentItem>  {

  getContentType(contentItem: ContentItem) {
    return this.http.get(contentItem._links.contentType.href);
  }

  getContentTemplate(contentItem: ContentItem) {
    return this.http.get(contentItem._links.template.href);
  }

  setContentTemplate(contentItem: ContentItem, template: ContentTemplate) {
    const headers = new HttpHeaders({'Content-Type': 'text/uri-list'});
    return this.http.put(contentItem._links.template.href, template._links.self.href, {headers: headers});
  }

  constructor(http: HttpClient) {
    super(http, '/api/contentItems');
  }

}
6
Jeremy

essayez cette méthode. est-ce que cela aide

 options = new RequestOptions();
            options.headers = new Headers();
            options.headers.append('Content-Type', 'application/json');
            options.headers.append('X-Requested-With', 'XMLHttpRequest');
0
Shailesh Ladumor

Le problème que vous avez est ici:

private getHeaders() {
    // I included these headers because otherwise FireFox
    // will request text/html instead of application/json
    let headers = new Headers();
    headers.append('Accept', 'application/json');
    return headers;
}

L'implémentation de HttpHeaders append() est la suivante:

append(name: string, value: string|string[]): HttpHeaders { 
   return this.clone({name, value, op: 'a'}); 
 } 

Il retourne un clone de votre objet HttpHeaders. Pour que votre append affecte, vous devez le stocker dans une variable qui est:

headers = headers.append('Accept', 'application/json');
0
Haifeng Zhang