如何在Blazor OnParameterSet中获取旧参数值?

时间:2019-08-16 21:21:02

标签: blazor

我想比较新旧参数值,并决定基于此参数执行不同的初始化或逻辑。在Blazor怎么办?

2 个答案:

答案 0 :(得分:0)

您可以将以前的值存储在var上,例如:

@page "/Counter"
@page "/Counter/{Id}"
<h1>Old Id: @IdSOld;</h1>
<a href="/Counter"> go home </a> |
<a href="/Counter/1"> go home 1 </a> |
<a href="/Counter/2"> go home 2 </a>

@code
{
    private string IdOld;
    [Parameter] public string Id { get; set; }

    protected override async Task OnParametersSetAsync()
    {
        // copy par value somewhere
        IdOld = Id?.ToString() ?? "";

        // reset parm (set to null) by yourself
        Id=null;  
    }
}

另请参阅:Blazor route changes in same page

答案 1 :(得分:0)

  

//这是内部的,因为用户代码没有已知的用例   比较           // ParameterView实例,即使有,也不太可能           //使用这些相等规则,这些规则专为它们对渲染的影响而设计。

来源:https://github.com/aspnet/AspNetCore/blob/master/src/Components/Components/src/ParameterView.cs(第113行)

阅读其余评论。
注意:ParameterView是以前已知的“对象” ParameterCollection。

现在,如果此功能对您至关重要,则应转到github并告诉他们:

  

这是内部的,因为没有用户代码的已知用例

不再正确。

当然,您可以在OnParametersSetAsync生命周期方法中将旧值存储在变量中,并将其与新参数值进行比较,但这只是一个变通的解决方法,因此您应该谨慎操作。惊喜在每个角落等着您。

如果有空闲时间,请查看此:https://github.com/aspnet/AspNetCore/blob/3148acfb105a16aa6c535d00eb0e50ec03992f3f/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs

希望这对您有帮助...