錯誤 TS2339:型別“{}”上不存在屬性“訂閱”。服務檔案:
import { HttpClient, HttpHeaders,HttpResponse } from '@angular/common/http';
import { Person } from './person';
import { Injectable } from '@angular/core';
import { throwError } from 'rxjs';
import 'rxjs/add/operator/map'
import { map } from "rxjs/operators";
@Injectable({
providedIn: 'root'
})
export class ApiService {
baseURL: string = "http://localhost:3000/api/persons/";
constructor(private http: HttpClient) {
}
addPerson(id,name)
{
var obj={};
var headers = new Headers();
headers.append('Content-Type', 'application/json');
let formData:FormData = new FormData();
formData.append('id',id);
formData.append('name',name);
this.http.post(this.baseURL "addPerson?token",formData).pipe(map(data => {
alert(data);
return data;
}));
return obj;
}
}
組件檔案:
import { Component, OnInit } from '@angular/core';
import { ApiService } from './api.service';
import { Person } from './person';
import { Observable } from 'rxjs';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
title = 'httppost';
people:Person[]=[];
person = new Person();
formData:any = {};
constructor(private apiService:ApiService) {
this.formData.ID =""; this.formData.Name= "";
}
ngOnInit() {
}
addPerson() {
this.apiService.addPerson(this.formData.ID,this.formData.Name).subscribe(data => {
console.log(data)
})
}
}
有服務檔案,我必須在其中呼叫我的 api 來獲取 api,當我要訂閱另一個類中的方法時,我正在呼叫該服務方法,然后它顯示屬性“訂閱”不存在的錯誤型別 {}
uj5u.com熱心網友回復:
首先,我想提一下,使用var不再是一個好習慣,因此您應該考慮重構要使用的所有內容let或const(有關更多資訊,請參見此處)。
其次,使用沒有任何型別或僅any作為型別的Typescript 也不是好的做法,因為您將失去 Typescript 的所有好處。
讓我們看看您當前的代碼:
addPerson(id,name)
{
var obj={};
var headers = new Headers();
headers.append('Content-Type', 'application/json');
let formData:FormData = new FormData();
formData.append('id',id);
formData.append('name',name);
this.http.post(this.baseURL "addPerson?token",formData).pipe(map(data => {
alert(data);
return data;
}));
return obj;
}
您的函式宣告不包含任何型別,基于我認為它們是 type 的名稱string。在id可能是型別number為好。
您的函式的回傳值是Object因為您回傳的是您的obj而不是預期的,Observable因為您收到了錯誤Property 'subscribe' does not exist on type '{}'.(有關更多資訊,請參見此處)。
要制作您的代碼,您需要按如下方式調整您的代碼:
// I've added typings but they're not necessary to make it work
addPerson(id: string | number, name: string): Observable<Person> {
const headers = new Headers();
headers.append('Content-Type', 'application/json');
const formData: FormData = new FormData();
formData.append('id', id);
formData.append('name', name);
// Return here your HTTP request <- This will make it work
return this.http.post<Person>(this.baseURL "addPerson?token",formData)
.pipe(
map(data => {
return data;
})
);
}
通過回傳 HTTP 請求,函式的回傳值和型別為Observable<Person>,因此組件中的訂閱將按預期作業。
根據您的評論, for 的型別Person可能如下所示:
export interface Person {
id: string | number;
name: string;
}
由于我不知道您的資料模型,因此我無法對界面進行更具體的說明。
uj5u.com熱心網友回復:
你的服務方法應該回傳一個 Observable 來使用訂閱,現在它只是回傳一個物件,應該是這樣的
addPerson(id,name): Observable<Person> {
return this.httpClient.post<Person>(this.baseURL "addPerson?token",formData);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/399821.html
上一篇:Laravel獲得學校用戶
