Duy*_* Le 4 blazor blazor-server-side asp.net-blazor
我有一个电子商务Blazor 服务器项目,我想在从Product Component向 Cart 添加一个项目后重新渲染Cart组件。我尝试将 Cart 组件继承到 Product 组件并运行 Cart 组件的公共方法来重新渲染其组件。
产品组件中的添加到购物车方法。
产品.Razor
public async Task AddToCart()
{
//The adding logic in this area
StateHasChanged();
Reload(); // this method is inherited from the Cart Component trying to re-render the Cart Component
//Does not work
}
Run Code Online (Sandbox Code Playgroud)
购物车剃刀
[Parameter]
public List<Models.Cart> CartItem { get; set; }
protected override void OnInitialized()
{
CartItem = _context.Cart.Where(i => i.CustomUserId == _userManager.GetUserId(_httpContextAccessor.HttpContext.User) && !i.IsSold).ToList();
}
public void Reload()
{
OnInitialized();
StateHasChanged();
}
Run Code Online (Sandbox Code Playgroud)
该方法成功运行,但 UI 没有像我想要的那样重新渲染。
我虽然在运行该OnInitialized()方法时 UI 会重新渲染,但StateHasChanged()?
谢谢你。
编辑:我更新了我的Reload()方法并在AddToCart()方法结束时调用它,但它不起作用:(
购物车剃刀
protected override void OnParametersSet()
{
CartItem = _context.Cart.Where(i => i.CustomUserId == _userManager.GetUserId(_httpContextAccessor.HttpContext.User) && !i.IsSold).ToList();
}
public void Reload()
{
OnParametersSet(); //updated but still not working
StateHasChanged();
}
Run Code Online (Sandbox Code Playgroud)
产品.Razor
public async Task AddToCart()
{
//The adding logic in this area
Reload(); // this method is inherited from the Cart Component trying to re-render the Cart Component
//Does not work
StateHasChanged();
}
Run Code Online (Sandbox Code Playgroud)
从 Cart 继承并不意味着您正在查看与项目中的“其他”购物车相同的实例。您继承的是 Cart 类(定义),而不是正在运行的组件。
你有两种方法可以解决这个问题:
使用公共父组件
使用事件广播器
| 归档时间: |
|
| 查看次数: |
401 次 |
| 最近记录: |