如何在angular service.ts中传递fix变量?

时间:2019-04-26 08:06:01

标签: angular api angular7 angular2-services

我有一个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("-------------------------");
  }

我不想以@Import user_id的形式将父组件的user_id发送到每个子组件,因为user_id相同,这似乎是多余的。

无论要从哪个组件调用服务,我都希望user_id直接进入POST服务。

2 个答案:

答案 0 :(得分:3)

您的服务中有一个user_id道具,您可以根据需要从任何组件进行设置或在此处自行初始化。

将您的信息设为:

this.httpClient.post(this.baseUrl + '/users-likes', {user_id: this.user_id, ...item})

答案 1 :(得分:1)

在执行get请求时只需使用tap,将其存储在服务中的变量中即可直接在发布请求中使用。所以:

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是什么。

还有与问题无关的建议:请在接口中键入数据,而不要使用任何内容或any,也请考虑对http请求使用错误处理。