Blazor 动态 createElement 和 appendChild
Blazor dynamically createElement and appendChild
我想通过 Blazor Webassembly 中的 JSInterop 动态创建 DIV 容器。我的方法是在 C# 中创建一个 CreateElement 方法,它在 javascript 和 returns 中调用 createElement 作为结果调用 ElementReference。但是当我 运行 以下代码时,我只得到一个空对象。
C#代码:
public object CreateElement(ElementReference elementReference)
{
return JsRuntime.Invoke<object>("createElement",
elementReference,
DotNetObjectReference.Create(this));
}
Javascript代码:
createElement(element, objectReference) {
const newDiv = document.createElement("div");
return element.appendChild(newDiv);
}
你不需要 JS。 Blazor 的创建使您不必操纵 DOM。创建组件。以这种方式操纵 DOM 违背了创建 Blazor 的初衷。您可能想从 https://docs.microsoft.com/en-us/aspnet/core/blazor/components/?view=aspnetcore-3.1
的一些基础知识开始
正如@Porkopek 所提到的,这样做并没有充分的理由,因为它或多或少违背了使用 Blazor 动态呈现标记的目的。
如果您绝对必须使用 createElement
,您应该将 JS 互操作代码绑定到要调用的 window
对象:
window.createDivElement = createElement(element, objectReference) {
const newDiv = document.createElement("div");
return element.appendChild(newDiv);
}
旁注,DotNetObjectReference.Create(this)
用于通过 [JSInvokable]
属性回调 C# 组件方法,此处可能不需要。
我想通过 Blazor Webassembly 中的 JSInterop 动态创建 DIV 容器。我的方法是在 C# 中创建一个 CreateElement 方法,它在 javascript 和 returns 中调用 createElement 作为结果调用 ElementReference。但是当我 运行 以下代码时,我只得到一个空对象。
C#代码:
public object CreateElement(ElementReference elementReference)
{
return JsRuntime.Invoke<object>("createElement",
elementReference,
DotNetObjectReference.Create(this));
}
Javascript代码:
createElement(element, objectReference) {
const newDiv = document.createElement("div");
return element.appendChild(newDiv);
}
你不需要 JS。 Blazor 的创建使您不必操纵 DOM。创建组件。以这种方式操纵 DOM 违背了创建 Blazor 的初衷。您可能想从 https://docs.microsoft.com/en-us/aspnet/core/blazor/components/?view=aspnetcore-3.1
的一些基础知识开始正如@Porkopek 所提到的,这样做并没有充分的理由,因为它或多或少违背了使用 Blazor 动态呈现标记的目的。
如果您绝对必须使用 createElement
,您应该将 JS 互操作代码绑定到要调用的 window
对象:
window.createDivElement = createElement(element, objectReference) {
const newDiv = document.createElement("div");
return element.appendChild(newDiv);
}
旁注,DotNetObjectReference.Create(this)
用于通过 [JSInvokable]
属性回调 C# 组件方法,此处可能不需要。