فایل js در صفحه دلخواه blazor

درج فایل js در صفحه دلخواه در blazor

توسط admin | گروه برنامه نویسی BLAZOR | 1403/08/11

نظرات 0

استفاده از فایل js در صفحه دلخواه در بلیزور

مثال ساده: فرم تماس با ما

ابتدا، کد کامپوننت فرم تماس با ما را در Blazor تعریف می‌کنیم:

 
@page "/contact"
 
<h3>Contact Us</h3>
 
<EditForm Model="@contactModel" OnValidSubmit="@HandleValidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
<div>
<label for="name">Name:</label>
<InputText id="name" @bind-Value="contactModel.Name" />
</div>
<div>
<label for="email">Email:</label>
<InputText id="email" @bind-Value="contactModel.Email" />
</div>
<div>
<label for="message">Message:</label>
<InputTextArea id="message" @bind-Value="contactModel.Message" />
</div>
<button type="submit">Submit</button>
</EditForm>
 
@code {
private ContactModel contactModel = new ContactModel();
 
private void HandleValidSubmit()
{
// Process the contact form submission
}
 
public class ContactModel
{
public string Name { get; set; }
public string Email { get; set; }
public string Message { get; set; }
}
}

در این مثال، ما یک فرم ساده برای تماس با ما ایجاد کرده‌ایم که شامل سه فیلد (نام، ایمیل و پیام) است. از EditForm برای مدیریت فرم و از DataAnnotationsValidator برای اعتبارسنجی فرم استفاده کرده‌ایم.

مثال پیشرفته‌تر: استفاده از Dependency Injection

برای یک مثال پیشرفته‌تر، می‌توانیم از Dependency Injection برای تزریق یک سرویس به کامپوننت استفاده کنیم. کد زیر یک سرویس ساده برای مدیریت داده‌ها را نشان می‌دهد:

 
@page "/data"
 
<h3>Data Management</h3>
 
@if (dataItems == null)
{
<p>Loading...</p>
}
else
{
<ul>
@foreach (var item in dataItems)
{
<li>@item</li>
}
</ul>
}
 
@code {
[Inject] private IDataService DataService { get; set; }
 
private List<string> dataItems;
 
protected override async Task OnInitializedAsync()
{
dataItems = await DataService.GetDataAsync();
}
}
 
public interface IDataService
{
Task<List<string>> GetDataAsync();
}
 
public class DataService : IDataService
{
public Task<List<string>> GetDataAsync()
{
// Simulate data retrieval
return Task.FromResult(new List<string> { "Item 1", "Item 2", "Item 3" });
}
}

در این مثال، ما از IDataService برای مدیریت داده‌ها استفاده کرده‌ایم و داده‌ها را از DataService با استفاده از Dependency Injection به کامپوننت تزریق کرده‌ایم. همچنین، می‌توانیم به بهبود تجربه‌ی کاربری و رندرینگ صفحات با استفاده از ویژگی‌های جدید دات نت 9 نگاهی بیندازیم.

مدیریت وضعیت با استفاده از جدیدترین ویژگی‌ها

 
@page "/state"
 
<h3>State Management</h3>
 
<input type="text" @bind="message" />
<p>Message: @message</p>
 
<button @onclick="SaveMessage">Save</button>
 
@code {
private string message;
 
[Inject] private IJSRuntime js { get; set; }
 
private async Task SaveMessage()
{
await js.InvokeVoidAsync("localStorage.setItem", "message", message);
}
}

این کد یک فیلد ورودی ساده برای ذخیره‌سازی پیام در localStorage با استفاده از جاوااسکریپت را نشان می‌دهد. اگر بخواهیم این موضوع را به عمق بیشتری بپردازیم، نیاز به ارائه مثال‌های بیشتر و توضیحات بیشتری از آنچه در بالا آمده است داریم.  

برای این کار در Blazor WebAssembly، می‌توانیم از تکنیک‌های بارگذاری پویا و نگهداری در حافظه‌ی مرورگر استفاده کنیم. به این روش می‌توانیم فقط در صفحه‌ی خاصی که نیاز داریم، فایل JQuery را بارگذاری کنیم و اطمینان حاصل کنیم که تنها یک‌بار بارگذاری می‌شود.

گام‌های انجام این کار:

ایجاد یک روش جاوااسکریپت برای بارگذاری اسکریپت: یک فایل جاوااسکریپت ایجاد کنید (مثلا scripts.js) و در آن یک تابع برای بارگذاری اسکریپت اضافه کنید:

 
function loadScriptOnce(url, callback) {
if (!window.loadedScripts) {
window.loadedScripts = {};
}
 
if (window.loadedScripts[url]) {
callback();
} else {
var script = document.createElement('script');
script.src = url;
script.onload = function () {
window.loadedScripts[url] = true;
callback();
};
document.head.appendChild(script);
}
}

این تابع بررسی می‌کند که آیا اسکریپت قبلا بارگذاری شده است یا خیر، و اگر نشده باشد، آن را بارگذاری می‌کند. 

فراخوانی تابع در کامپوننت Blazor: در کامپوننت Blazor، می‌توانید از IJSRuntime برای فراخوانی تابع جاوااسکریپت استفاده کنید. مطمئن شوید که فایل جاوااسکریپت در wwwroot قرار دارد و در index.html یا wwwroot/index.html ارجاع داده شده است.

 
@page "/page-with-jquery"
 
<h3>Page with JQuery</h3>
 
@code {
[Inject] IJSRuntime JS { get; set; }
 
protected override async Task OnInitializedAsync()
{
await JS.InvokeVoidAsync("loadScriptOnce", "/path/to/jquery.js", DotNetObjectReference.Create(this));
}
 
[JSInvokable]
public static void ScriptLoadedCallback()
{
// Script has been loaded
}
}

این روش، اطمینان حاصل می‌کند که فایل JQuery فقط یک بار بارگذاری می‌شود و در حافظه‌ی مرورگر باقی می‌ماند.

ذخیره‌ی فایل‌های جاوااسکریپت در localStorage: برای جلوگیری از بارگذاری مجدد اسکریپت‌ها پس از هر بار ریفرش صفحه، می‌توانید از localStorage برای ذخیره‌ی وضعیت استفاده کنید. این کار را می‌توانید با اضافه کردن چند خط کد به تابع loadScriptOnce انجام دهید:

function loadScriptOnce(url, callback) {
if (!window.loadedScripts) {
window.loadedScripts = {};
}
 
if (localStorage.getItem(url)) {
callback();
} else {
var script = document.createElement('script');
script.src = url;
script.onload = function () {
window.loadedScripts[url] = true;
localStorage.setItem(url, true);
callback();
};
document.head.appendChild(script);
}
}

با این روش‌ها، می‌توانید اطمینان حاصل کنید که فایل JQuery فقط در صفحه‌ی مورد نظر بارگذاری می‌شود و تنها یک‌بار در حافظه‌ی مرورگر قرار می‌گیرد، حتی بعد از ریفرش صفحه.  

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر