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

问题描述 投票:0回答:2

我有一个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服务,无论从哪个组件调用该服务。

angular api angular7 angular2-services
2个回答
3
投票

在您的服务中有一个user_id道具,您可以从任何组件设置它或根据您的要求在这里初始化它。

你的帖子如下:

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

1
投票

只需在执行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请求使用错误处理。

© www.soinside.com 2019 - 2024. All rights reserved.