首頁 > 軟體

一文教你在現有Vue專案中嵌入Blazor專案

2023-01-22 14:00:42

準備流程

Vue 專案建立流程

1.使用Vue建立一個Demo專案 全部選擇預設No即可 然後專案名稱就用demo

npm init vue@latest

cd demo
npm i

安裝完成依賴,在專案的根目錄找到index.html 新增以下程式碼即可

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico" rel="external nofollow" >
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vite App</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.ts"></script>
    <script src="_content/Microsoft.AspNetCore.Components.CustomElements/BlazorCustomElements.js"></script> 
    <script src="_framework/blazor.webassembly.js"></script>
  </body>
</html>

在 srcApp.vue中新增以下程式碼

<script setup lang="ts">
</script>

<template>
  <main>
    <my-blazor-counter/>   <!--對應razor元件的標籤 -->
  </main>
</template>

然後將Vue專案構建

npm run build

將生成的 dist目錄copy到建立的 Blazorwwwroot

Blazor專案建立流程

使用mkdir建立一個webassembly資料夾 ,cd進入webassembly目錄,建立 一個空的blazor-webassembly的專案

mkdir webassembly  
cd webassembly
dotnet new blazorwasm-empty 

Microsoft.AspNetCore.Components.CustomElements新增到專案檔案中,Microsoft.AspNetCore.Components.CustomElements就是用於在Vue中使用Blazor的一個包, 需要注意的是這個包只有.Net 6Rc和.Net7正式版才能使用

<PackageReference="Microsoft.AspNetCore.Components.CustomElements" Version="7.0.2" />

然後開啟Program.cs 修改相關程式碼

using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;

var builder = WebAssemblyHostBuilder.CreateDefault(args);
// BlazorApp.Pages.Index可以修改成自己的渲染的razor元件
// my-blazor-counter就是上面提到的razor對應的標記 這樣就可以在react通過my-blazor-counter去渲染BlazorApp.Pages.Index元件的內容了
builder.RootComponents.RegisterCustomElement<webassembly.Pages.Index>("my-blazor-counter");
builder.RootComponents.Add<HeadOutlet>("head::after");

await builder.Build().RunAsync();

開啟webassembly.Pages.Index 修改相關程式碼

<h1>@Title</h1>

<p role="status">點選數量: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">點選Blazor元件效果</button>

@code {
    private int currentCount = 0;
    [Parameter] 
    public string Title { get; set; } = "Vue 嵌入 Blazor";
    [Parameter] 
    public int? IncrementAmount { get; set; }

    private void IncrementCount()
    {
        currentCount++;
    }
}
<style>
    button {
        font-weight: bold;
        background-color: #7b31b8;
        color: white;
        border-radius: 4px;
        padding: 4px 12px;
        border: none;
    }

    button:hover {
        background-color: #9654cc;
        cursor: pointer;
    }

    button:active {
        background-color: #b174e4;
    }

</style>

 需要注意將`Vue`專案build生成的檔案拷貝並且覆蓋到`Blazor`專案中的`wwwroot`中

執行效果

我們進入到Blazor專案中準備執行blazor專案

dotnet watch

然後檢視效果,執行效果如下:

執行基本沒有什麼問題,這樣Blazor就不太會太死板,我們就可以某些在於Blazor有優勢的情況就可以去嵌入Blazor實現,在Vue中的使用成本極低,只是參照js,然後通過加入對應的標籤就可以直接使用,當然你如果想要倆個專案一塊偵錯的話,可能需要在本地搭建nginx 去將倆個專案一塊代理到一個埠,這種情況是比當前的拷貝到wwwroot目錄的效果更好的,我現在正在使用這種嵌入的方式在 一個基於react的Ide(opensumi)中嵌入Blazor的元件,實現動態編譯程式碼並且實時的去渲染Blazor元件的效果,這樣會很有效提供開發Blazor的效率,也可以在公司現有專案中的Vue 或者react Angular的專案中嵌入Blazor,目前來說嵌入成本很低,而且官方的是支援ServerWebassembly倆種模式的。可以參考實際業務去使用不同模式的,說到這裡基本講解完成了。

到此這篇關於一文教你在現有Vue專案中嵌入Blazor專案的文章就介紹到這了,更多相關Vue嵌入Blazor內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com