首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Blazor应用在.NET 5.0中呈现美人鱼图

用Blazor应用在.NET 5.0中呈现美人鱼图
EN

Stack Overflow用户
提问于 2020-11-27 21:50:55
回答 3查看 1.3K关注 0票数 2

我在这里遵循了Deploying Mermaid指南:

https://mermaid-js.github.io/mermaid/#/?id=deploying-mermaid

将它直接用于codepen工作:

https://codepen.io/Ogglas/pen/MWjWNxR

代码语言:javascript
复制
mermaid.initialize({
  startOnLoad:true
});

<div class="mermaid">
    graph LR
        A[Client] --- B[Load Balancer]
        B-->C[Server01]
        B-->D(Server02)
</div>

为了在Blazor中启用它,我编辑了BlazorApp.Client -> wwwroot -> index.html,并在<script src="_framework/blazor.webassembly.js"></script>下面添加了以下内容。

代码语言:javascript
复制
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
<script>mermaid.initialize({startOnLoad:true});</script>

然后,我用以下值编辑了Index.razor

代码语言:javascript
复制
<h1>Hello, world!</h1>

Welcome to your new app.

<div class="mermaid">
    graph LR
        A[Client] --- B[Load Balancer]
        B-->C[Server01]
        B-->D(Server02)
</div>

但是,这不会呈现美人鱼关系图。我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-27 22:53:35

现在只需按一下按钮就可以解决这个问题:

Index.razor:

代码语言:javascript
复制
@page "/"
@inject IJSRuntime JSRuntime

<h1>Hello, world!</h1>

Welcome to your new app.

<div>
    <button @onclick="TriggerClick">
        Trigger Mermaid diagram render
    </button>
</div>

<div>
    Graph:
    <div id="output"></div>
</div>

<SurveyPrompt Title="How is Blazor working for you?" />

@code {

    public async Task TriggerClick()
    {
        await JSRuntime.InvokeVoidAsync("renderMermaidDiagram");
    }
}

<head>,将其添加到index.html部分:

代码语言:javascript
复制
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
<script>
    window.renderMermaidDiagram = () => {
        var output = document.getElementById("output");
        var input = "graph LR \n" +
            "A[Client] --- B[Load Balancer] \n" +
            "B-->C[Server01] \n" +
            "B-->D(Server02) \n";
        mermaid.mermaidAPI.render('theGraph', input, function (svgCode) {
            output.innerHTML = svgCode;
        });
    }
</script>

会是这样的:

请注意,一些针对美人鱼的教程使用的是过时的版本,并且不适用于最新的版本。

资料来源:

https://mermaid-js.github.io/mermaid/#/Tutorials?id=mermaid-with-html

https://learn.microsoft.com/en-us/aspnet/core/blazor/call-javascript-from-dotnet?view=aspnetcore-5.0

票数 2
EN

Stack Overflow用户

发布于 2021-08-08 10:51:08

对于服务器端,我也有一些渲染问题。(还在调查原因,所以我可以解决这个问题)

服务器端的现状:

在页面中添加html的这一部分,并参考美人鱼的js文件。

代码语言:javascript
复制
<div class="mermaid">
   graph LR
   A[Client] --- B[Load Balancer]
   B-->C[Server01]
   B-->D(Server02)
</div>

这在预呈现部分呈现正常,而第二部分在应用程序引导时再次呈现为纯文本。

您可以通过在页面的"@code“部分中添加以下内容来测试这一点

代码语言:javascript
复制
protected override async Task OnInitializedAsync()
{
   string t = "Set breakpoint on this line, this will be hit 2 times";
}

奇怪的是,如果你加上或不加“部分来初始化美人鱼”,我会得到同样的行为结果。

代码语言:javascript
复制
mermaid.initialize({
        startOnLoad: true
    });

Clienside

我找到了这个客户端nuget解决方案,效果很好

https://github.com/TrueCommerce/MermaidJS.Blazor

票数 1
EN

Stack Overflow用户

发布于 2021-08-24 11:47:30

美人鱼(8.11.5用于测试)+ Blazor服务器端解决方案(尚未用客户端测试):

我将JS互操作放在它自己的对象和文件中,例如blazor-helper.js

代码语言:javascript
复制
var JsFunctions = window.JsFunctions || {};
JsFunctions = {
    MermaidInitialize: function() {
        mermaid.initialize({
            startOnLoad: true,
            securityLevel: "loose",
            // Other options.
          });
    },

    MermaidRender: function() {
        mermaid.init();
    }
};

显然,不需要抽象mermaid.init()就可以逃脱,但我认为它提供了清晰的信息。

然后在blazor代码中(启用可空的c#9语法):

代码语言:javascript
复制
    [Inject]
    protected IJSRuntime? JsRuntime { get; set; } = null;

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if(this.JsRuntime is not null)
        {
            if(firstRender)
            {
                await this.JsRuntime.InvokeVoidAsync("JsFunctions.MermaidInitialize");
            }

            await this.JsRuntime.InvokeVoidAsync("JsFunctions.MermaidRender");
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65044209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档