Blazor组件(在库中和JSInterop中)>

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

我已经在整个Blazor项目中创建了Blazor组件,并且一切正常。但是,当我将此组件移到它自己的Razor类库项目中时,现在出现一个错误,直到与服务器建立连接后,我才可以使用JSInterop。我正在OnAfterRenderAsync()方法中运行代码。

进行更改时,我不得不稍微更改代码。在一个完整的Blazor项目中,在Startup类中为DI提供了JSInterop。但是,calss库不是这种情况。

因此,而不是页面中的“ @inject JSInterop js”,我必须像这样设置它-

  private IJSRuntime js { get; set; }

  protected override void OnInitialized()
  {
    js = ScopedServices.GetRequiredService<IJSRuntime>();
  }

从网络上提供的粗略详细信息中,我假设这是从Parent项目获得服务的。

使用调试,我可以看到js不是null。它似乎确实已设置为有效对象。

有人能指出我正确的方向吗?

我已经在整个Blazor项目中创建了Blazor组件,并且一切正常。但是,当我将该组件移到它自己的Razor类库项目中时,我现在收到一个错误,我无法...

components blazor blazor-jsinterop
1个回答
0
投票

服务器预先渲染,因此您的代码将在与服务器建立客户端连接之前运行。在OnAfterRenderAsync中进行渲染时,仅当firstRender参数为true时或在此之后的任何点(但绝对不能)之前,才应使用IJSRuntime。

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