我有一个非常基本的组件,可以获取学生列表并显示它们,如下所示:
@if(result == null) {
<p> No students found </p>
}else{
@foreach (var person in result){
<b> @person.name </b>
}
}
@code {
[Parameter] public string Token { get; set; }
[Parameter] public string StudentsUrl { get; set; }
StudentsModel result;
protected override async Task OnInitializedAsync()
{
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")
);
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
"Basic", Convert.ToBase64String(
System.Text.ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}", "", Token)
)
)
);
HttpResponseMessage response = client.GetAsync(StudentsUrl).Result;
response.EnsureSuccessStatusCode();
string responseData = await response.Content.ReadAsStringAsync();
result = JsonConvert.DeserializeObject<StudentsModel>(responseData);
}
}
}
该组件做得很好,但我需要在另一个组件中使用下面显示的数据。另一个组件有一个下拉列表(<select> </select>
标签(,在这些标签中,我想显示用户列表(即@person.name
(
因此,我的问题是如何避免在两个不同的组件中两次获取相同的API,并简单地使用此类中生成的数据,以便在另一个组件中使用它。
扩展@Brian Parker
的注释
你可以用不同的方式来做这取决于你,
Dependency Injection
首先,制作一个名为Person.cs
的Model
public class Person
{
private List<string> name { get; set; }
}
然后转到Program.cs
并将其注册为这样的服务,builder.Services.AddScoped<Person>();
第三,将其注入父组件,@inject Person _person;
最后,执行API调用并将数据保存到此_person
中。
然后,在您的Other Component
中,只需再次注入此服务,它就会向您提供该数据,因为它已注册为作用域服务。