Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Catatan
Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 9 dari artikel ini.
Peringatan
Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 9 dari artikel ini.
Penting
Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Untuk rilis saat ini, lihat versi .NET 9 dari artikel ini.
Muat kode JavaScript (JS) menggunakan salah satu pendekatan berikut:
JavaScript inline tidak disarankan untuk aplikasi Blazor. Sebaiknya gunakan kolokasi JS yang dikombinasikan dengan modul JS.
Lokasi tag <script>
Hanya tempatkan <script>
tag dalam file komponen (.razor
) jika komponen dijamin untuk mengadopsi penyajian sisi server statis (SSR statis) tanpa navigasi yang ditingkatkan. Menempatkan <script>
tag dalam file komponen tidak menghasilkan peringatan atau kesalahan waktu kompilasi, tetapi perilaku pemuatan skrip mungkin tidak sesuai dengan harapan Anda dalam komponen yang mengadopsi mode render interaktif atau SSR statis dengan navigasi yang ditingkatkan.
Jangan menempatkan <script>
tag dalam file komponen (.razor
) karena <script>
tag tidak dapat diperbarui secara dinamis. Menempatkan tag <script>
dalam file komponen menghasilkan kesalahan waktu kompilasi.
Catatan
Contoh dokumentasi biasanya menempatkan skrip dalam tag <script>
atau memuat skrip global dari file eksternal. Pendekatan ini mencemari klien dengan fungsi global. Untuk aplikasi produksi, sebaiknya tempatkan JS modul terpisah JS yang dapat diimpor saat diperlukan. Untuk informasi lebih lanjut, lihat bagian isolasi JavaScript dalam modul JavaScript.
Catatan
Contoh dokumentasi menempatkan skrip ke dalam tag <script>
atau memuat skrip global dari file eksternal. Pendekatan ini mencemari klien dengan fungsi global. Menempatkan JS ke dalam modul-modul terpisah JS yang dapat diimpor saat diperlukan tidak didukung sebelum .NET 5. Jika aplikasi memerlukan penggunaan JS modul untuk JS isolasi, sebaiknya gunakan .NET 5 atau yang lebih baru untuk membangun aplikasi. Untuk informasi selengkapnya, gunakan daftar dropdown Versi untuk memilih .NET 5 atau versi yang lebih baru dari artikel ini dan lihat bagian Isolasi JavaScript di modul JavaScript .
Memuat skrip dalam markup <head>
Pendekatan di bagian ini umumnya tidak disarankan.
Tempatkan tag JavaScript (JS) (<script>...</script>
) di<head>
markup elemen:
<head>
...
<script>
window.jsMethod = (methodParameter) => {
...
};
</script>
</head>
Memuat JS dari <head>
bukanlah pendekatan terbaik karena alasan berikut:
- Interop JS mungkin gagal jika skrip bergantung pada Blazor. Sebaiknya muat skrip menggunakan salah satu pendekatan lain, bukan melalui markup
<head>
. - Halaman dapat menjadi interaktif lebih lambat karena waktu yang diperlukan untuk menguraikan JS dalam skrip.
Dalam markup komponen, skrip dapat dimuat melalui komponen HeadContent
dengan catatan umum bahwa pendekatan ini memperlambat pemuatan halaman pada sisi klien, yang sebaiknya kami hindari. Saat skrip dimuat dengan HeadContent
komponen dalam aplikasi Blazor Server, aplikasi Blazor WebAssembly, atau Blazor Web App menggunakan mode render interaktif (SSR interaktif, CSR) atau SSR statis dengan navigasi yang ditingkatkan, berpindah dari halaman komponen akan menghapus tag <script>
dari konten yang ditampilkan <head>
, tetapi tidak membuang kode JavaScript skrip, termasuk penangan kejadian yang didaftarkan skrip, variabel yang diekspos, dan metode yang disediakan skrip. Hanya Blazor Web App yang menggunakan SSR statis tanpa navigasi yang ditingkatkan akan memuat ulang kode JavaScript saat pengguna meninggalkan halaman. Umumnya, Anda lebih baik jika menambahkan tag <script>
ke konten <head>
fisik, kecuali Anda memang secara khusus ingin menyimpan referensi skrip tersebut dalam komponen yang menggunakannya dan tidak masalah jika kode tidak dihapus pada peristiwa navigasi.
Dalam markup komponen, skrip dapat dimuat melalui komponen HeadContent
dengan catatan umum bahwa pendekatan ini memperlambat pemuatan halaman pada sisi klien, yang sebaiknya kami hindari. Ketika skrip dimuat dengan komponen HeadContent
, menavigasi jauh dari halaman komponen menghapus tag <script>
dari konten <head>
yang dirender tetapi tidak membongkar kode JavaScript skrip, termasuk penanganan aktivitas yang didaftarkan skrip, variabel yang diekspos, dan metode yang disediakan skrip. Umumnya, Anda lebih baik jika menambahkan tag <script>
ke konten <head>
fisik, kecuali Anda memang secara khusus ingin menyimpan referensi skrip tersebut dalam komponen yang menggunakannya dan tidak masalah jika kode tidak dihapus pada peristiwa navigasi.
Memuat skrip dalam markup <body>
Tempatkan tag JavaScript (<script>...</script>
) di dalam </body>
penutup setelah Blazor referensi skrip:
<body>
...
<script src="{BLAZOR SCRIPT}"></script>
<script>
window.jsMethod = (methodParameter) => {
...
};
</script>
</body>
Dalam contoh sebelumnya, {BLAZOR SCRIPT}
tempat penampung adalah Blazor jalur skrip dan nama file. Untuk lokasi skrip, lihat Blazor proyek ASP.NET Core.
Memuat skrip dari file JavaScript eksternal (.js
) yang ditempatkan dengan komponen
Kolokasi file JavaScript (JS) untuk Razor komponen adalah cara mudah untuk mengatur skrip dalam aplikasi.
Razor komponen Blazor aplikasi menyusun JS file menggunakan .razor.js
ekstensi dan dapat diatasi secara publik menggunakan jalur ke file dalam proyek:
{PATH}/{COMPONENT}.razor.js
- Tempat
{PATH}
penampung adalah jalur ke komponen. - Tempat
{COMPONENT}
penampung adalah komponen.
Saat aplikasi diterbitkan, kerangka kerja secara otomatis memindahkan skrip ke akar web. Skrip dipindahkan ke bin/Release/{TARGET FRAMEWORK MONIKER}/publish/wwwroot/{PATH}/{COMPONENT}.razor.js
, tempat penampung:
-
{TARGET FRAMEWORK MONIKER}
adalah Moniker Kerangka Kerja Target (TFM). -
{PATH}
adalah jalur ke komponen. -
{COMPONENT}
adalah nama komponen.
Tidak ada perubahan yang diperlukan pada URL relatif skrip, seperti Blazor yang mengurus penempatan JS file dalam aset statis yang diterbitkan untuk Anda.
Bagian ini dan contoh berikut terutama berfokus pada penjelasan JS kolokasi file. Contoh pertama menunjukkan file yang dikolokasi JS dengan fungsi biasa JS . Contoh kedua menunjukkan penggunaan modul untuk memuat fungsi, yang merupakan pendekatan yang direkomendasikan untuk sebagian besar aplikasi produksi. JS Panggilan dari .NET sepenuhnya tercakup dalam Blazor , di mana ada penjelasan lebih lanjut tentang BlazorJS API dengan contoh tambahan. Pembuangan komponen, yang ada dalam contoh kedua, tercakup dalam ASP.NET pembuangan komponen core Razor.
Komponen berikut JsCollocation1
memuat skrip melalui HeadContent
komponen dan memanggil JS fungsi dengan IJSRuntime.InvokeAsync. Tempat {PATH}
penampung adalah jalur ke komponen.
Penting
Jika Anda menggunakan kode berikut untuk demonstrasi di aplikasi pengujian, ubah {PATH}
tempat penampung ke jalur komponen (misalnya: Components/Pages
di .NET 8 atau yang lebih baru atau Pages
di .NET 7 atau yang lebih lama).
Blazor Web App Dalam (.NET 8 atau yang lebih baru), komponen memerlukan mode render interaktif yang diterapkan baik secara global ke aplikasi atau ke definisi komponen.
Tambahkan skrip berikut setelah Blazor skrip (lokasi Blazor skrip mulai):
<script src="{PATH}/JsCollocation1.razor.js"></script>
JsCollocation1
komponen ({PATH}/JsCollocation1.razor
):
@page "/js-collocation-1"
@inject IJSRuntime JS
<PageTitle>JS Collocation 1</PageTitle>
<h1>JS Collocation Example 1</h1>
<button @onclick="ShowPrompt">Call showPrompt1</button>
@if (!string.IsNullOrEmpty(result))
{
<p>
Hello @result!
</p>
}
@code {
private string? result;
public async Task ShowPrompt()
{
result = await JS.InvokeAsync<string>(
"showPrompt1", "What's your name?");
StateHasChanged();
}
}
File yang dikolokasi JS ditempatkan di JsCollocation1
samping file komponen dengan nama JsCollocation1.razor.js
file .
JsCollocation1
Dalam komponen, skrip dirujuk di jalur file yang dikolokasi. Dalam contoh berikut, showPrompt1
fungsi menerima nama pengguna dari Window prompt()
dan mengembalikannya ke JsCollocation1
komponen untuk ditampilkan.
{PATH}/JsCollocation1.razor.js
:
function showPrompt1(message) {
return prompt(message, 'Type your name here');
}
Pendekatan sebelumnya tidak disarankan untuk penggunaan umum dalam aplikasi produksi karena pendekatan mencemari klien dengan fungsi global. Pendekatan yang lebih baik untuk aplikasi produksi adalah menggunakan JS modul. Prinsip umum yang sama berlaku untuk memuat JS modul dari file yang dikolokasi JS , seperti yang ditunjukkan contoh berikutnya.
Metode komponen berikut JsCollocation2
memuat OnAfterRenderAsync
modul ke dalam JS, yang merupakan module
IJSObjectReference kelas komponen.
module
digunakan untuk memanggil showPrompt2
fungsi. Tempat {PATH}
penampung adalah jalur ke komponen.
Penting
Jika Anda menggunakan kode berikut untuk demonstrasi di aplikasi pengujian, ubah {PATH}
tempat penampung ke jalur komponen.
Blazor Web App Dalam (.NET 8 atau yang lebih baru), komponen memerlukan mode render interaktif yang diterapkan baik secara global ke aplikasi atau ke definisi komponen.
JsCollocation2
komponen ({PATH}/JsCollocation2.razor
):
@page "/js-collocation-2"
@implements IAsyncDisposable
@inject IJSRuntime JS
<PageTitle>JS Collocation 2</PageTitle>
<h1>JS Collocation Example 2</h1>
<button @onclick="ShowPrompt">Call showPrompt2</button>
@if (!string.IsNullOrEmpty(result))
{
<p>
Hello @result!
</p>
}
@code {
private IJSObjectReference? module;
private string? result;
protected async override Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
/*
Change the {PATH} placeholder in the next line to the path of
the collocated JS file in the app. Examples:
./Components/Pages/JsCollocation2.razor.js (.NET 8 or later)
./Pages/JsCollocation2.razor.js (.NET 7 or earlier)
*/
module = await JS.InvokeAsync<IJSObjectReference>("import",
"./{PATH}/JsCollocation2.razor.js");
}
}
public async Task ShowPrompt()
{
if (module is not null)
{
result = await module.InvokeAsync<string>(
"showPrompt2", "What's your name?");
StateHasChanged();
}
}
async ValueTask IAsyncDisposable.DisposeAsync()
{
if (module is not null)
{
try
{
await module.DisposeAsync();
}
catch (JSDisconnectedException)
{
}
}
}
}
Dalam contoh sebelumnya, JSDisconnectedException terjebak selama pembuangan modul jika Blazorsirkuit hilang SignalR . Jika kode sebelumnya digunakan dalam Blazor WebAssembly aplikasi, tidak SignalR ada koneksi yang hilang, sehingga Anda dapat menghapustry
-catch
blok dan meninggalkan baris yang membuang modul ().await module.DisposeAsync();
Untuk informasi selengkapnya, lihat ASP.NET Blazor interoperabilitas Core JavaScript (JS interop).
{PATH}/JsCollocation2.razor.js
:
export function showPrompt2(message) {
return prompt(message, 'Type your name here');
}
Penting
Jangan menempatkan tag <script>
untuk JsCollocation2.razor.js
setelah skrip Blazor karena modul dimuat dan di-cache secara otomatis ketika import()
dinamis dipanggil.
Penggunaan skrip dan modul untuk dikolokasi JS di Razor pustaka kelas (RCL) hanya didukung untuk Blazormekanisme interop 's JS berdasarkan IJSRuntime antarmuka. Jika Anda menerapkan interop JavaScript[JSImport]
/[JSExport]
, lihat .Blazor
Untuk skrip atau modul yang Razor disediakan oleh pustaka kelas (RCL) menggunakan IJSRuntimeinterop berbasis JS , jalur berikut digunakan:
./_content/{PACKAGE ID}/{PATH}/{COMPONENT}.{EXTENSION}.js
- Segmen jalur untuk direktori saat ini (
./
) diperlukan untuk membuat jalur aset statis yang benar ke file JS. - Tempat penampung
{PACKAGE ID}
adalah pengidentifikasi paket RCL (atau nama pustaka untuk pustaka kelas yang dirujuk oleh aplikasi). - Tempat
{PATH}
penampung adalah jalur ke komponen. Jika komponen Razor terletak di akar RCL, segmen jalur tidak disertakan. - Tempat
{COMPONENT}
penampung adalah nama komponen. - Tempat
{EXTENSION}
penampung cocok dengan ekstensi komponen, baikrazor
ataucshtml
.
Dalam contoh aplikasi Blazor berikut:
- Pengidentifikasi paket RCL adalah
AppJS
. - Skrip modul dimuat untuk komponen
JsCollocation3
(JsCollocation3.razor
). - Komponen
JsCollocation3
ada di folderComponents/Pages
RCL.
module = await JS.InvokeAsync<IJSObjectReference>("import",
"./_content/AppJS/Components/Pages/JsCollocation3.razor.js");
Untuk informasi lebih lanjut tentang RCL, lihat Menggunakan komponen ASP.NET Core Razor dari Razor pustaka kelas (RCL).
Memuat skrip dari file JavaScript eksternal (.js
)
Tempatkan tag JavaScript (JS) (<script>...</script>
) dengan jalur sumber skrip (src
) di dalam </body>
penutup setelah Blazor referensi skrip:
<body>
...
<script src="{BLAZOR SCRIPT}"></script>
<script src="{SCRIPT PATH AND FILE NAME (.js)}"></script>
</body>
Untuk tempat penampung dalam contoh sebelumnya:
- Tempat
{BLAZOR SCRIPT}
penampung adalah Blazor jalur skrip dan nama file. Untuk lokasi skrip, lihat Blazor proyek ASP.NET Core. - Tempat penampung
{SCRIPT PATH AND FILE NAME (.js)}
adalah nama file jalur dan skrip di bagianwwwroot
.
Pada contoh tag <script>
sebelumnya, file scripts.js
ada di folder wwwroot/js
aplikasi:
<script src="js/scripts.js"></script>
Anda juga dapat menyajikan skrip langsung dari wwwroot
folder jika Anda lebih suka tidak menyimpan semua skrip Anda di folder terpisah di bawah wwwroot
:
<script src="scripts.js"></script>
Ketika file JS eksternal disediakan oleh pustaka kelas Razor, tentukan file JS menggunakan jalur aset web statis yang stabil: _content/{PACKAGE ID}/{SCRIPT PATH AND FILE NAME (.js)}
:
- Tempat penampung
{PACKAGE ID}
adalah ID paket pustaka. Default ID paket diatur ke nama rakitan proyek jika<PackageId>
tidak ditentukan dalam file proyek. - Tempat penampung
{SCRIPT PATH AND FILE NAME (.js)}
adalah jalur dan nama file di bagianwwwroot
.
<body>
...
<script src="{BLAZOR SCRIPT}"></script>
<script src="_content/{PACKAGE ID}/{SCRIPT PATH AND FILE NAME (.js)}"></script>
</body>
Dalam contoh berikut dari tag <script>
sebelumnya:
- Pustaka kelas Razor memiliki nama rakitan
ComponentLibrary
, dan<PackageId>
tidak ditentukan dalam file proyek pustaka. - File
scripts.js
ada di folderwwwroot
pustaka kelas.
<script src="_content/ComponentLibrary/scripts.js"></script>
Untuk informasi lebih lanjut, lihat Menggunakan komponen Razor ASP.NET Core dari pustaka kelas (RCL) Razor.
Menyuntikkan skrip sebelum atau sesudah Blazor dimulai
Untuk memastikan skrip dimuat sebelum atau sesudah Blazor dimulai, gunakan penginisialisasi JavaScript. Untuk informasi dan contoh selengkapnya, lihat Blazor ASP.NET Core.
Suntikkan skrip setelah Blazor dimulai
Untuk menyuntikkan skrip setelah Blazor dimulai, rantai ke hasil tersebut Promise
dari awal Blazormanual . Untuk informasi selengkapnya dan contohnya, lihat Blazor ASP.NET Core.
Isolasi JavaScript dalam modul JavaScript
Blazormengaktifkan isolasi JavaScript (JS) dalam modulJS (spesifikasi ECMAScript).
JS isolasi memberikan manfaat berikut:
- JS yang diimpor tidak lagi mencemari namespace global.
- Konsumen pustaka dan komponen tidak perlu mengimpor JS terkait.
Dalam skenario sisi server, selalu perangkap JSDisconnectedException jika hilangnya BlazorSignalR sirkuit JS mencegah panggilan interop membuang modul, yang menghasilkan pengecualian yang tidak tertangani. Blazor WebAssembly aplikasi tidak menggunakan SignalR koneksi selama JS interop, jadi tidak perlu menjebak JSDisconnectedException aplikasi Blazor WebAssembly untuk pembuangan modul.
Untuk informasi selengkapnya, lihat sumber daya berikut:
ASP.NET Core