我有一个API来获取用户ID,名称和一些进一步的细节。现在我正在创建POST api以发送一些数据和user_id。我在不同的组件中调用POST服务并传递不同的值,但User_id在每个组件中都是相同的。
Service.ts
@Injectable({
providedIn: 'root'
})
get_user_info(){
return this.httpClient.get(this.baseUrl + '/users/user_info', { headers: headers }); <-- getting all data
}
}
send_user_preference(item) {
console.log("Checking passed item: ",item);
return this.httpClient.post(this.baseUrl + '/users-likes',item); <--- here i need data from resource + user_id
console.log("-------------------------");
}
我不想将父comp的user_id作为@Import user_id发送到每个子组件,因为它似乎是多余的,因为user_id是相同的。
我希望user_id直接用于POST服务,无论从哪个组件调用该服务。
在您的服务中有一个user_id
道具,您可以从任何组件设置它或根据您的要求在这里初始化它。
你的帖子如下:
this.httpClient.post(this.baseUrl + '/users-likes', {user_id: this.user_id, ...item})
只需在执行get请求时使用tap
,将其存储在服务中的变量中,即可直接在post请求中使用。所以:
import { tap } from 'rxjs/operators';
// ...
userId;
get_user_info() {
return this.httpClient.get<any>(...).pipe(
// apply your usecase, whatever property id is stored in
tap((data) => this.userId = data.userId),
catchError( /** error handling! **/)
)
}
现在您可以在请求中使用它:
send_user_preference(item) {
console.log(this.userId) // use it how you need it!
}
现在,在发出请求时,您的组件都不需要关心用户ID。
还有一个与问题无关的建议:请将数据输入到接口而不是使用none,或者any
,也考虑对http请求使用错误处理。