如何将数据从一个Blazor组件发送到另一个组件



我有一个非常基本的组件,可以获取学生列表并显示它们,如下所示:

@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的注释

你可以用不同的方式来做这取决于你,

  1. Dependency Injection

首先,制作一个名为Person.csModel

public class Person
{
private List<string> name { get; set; } 
}

然后转到Program.cs并将其注册为这样的服务,builder.Services.AddScoped<Person>();

第三,将其注入父组件,@inject Person _person;

最后,执行API调用并将数据保存到此_person中。

然后,在您的Other Component中,只需再次注入此服务,它就会向您提供该数据,因为它已注册为作用域服务。

相关内容

  • 没有找到相关文章