JavaScript uygulamalarında ve SPA çerçevelerinde bileşenleri kullanma Razor
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
Bu makalede JavaScript'ten bileşenleri işleme Razor , özel öğeler kullanma Blazor ve Angular ve React bileşenleri oluşturma işlemleri anlatılmıştır.
Not
Gelecekte (Blazor Server) betik için blazor.web.js
daha iyi destek eklenene kadar bileşenleri mevcut bir JavaScript uygulamasıyla tümleştirirken Razor () veBlazor WebAssemblyblazor.webassembly.js
(Blazor Web App) betikleri kullanmanızı blazor.server.js
öneririz. Daha fazla bilgi için bkz . RegisterCustomElement 8 ' de Blazor çalışmayı durdurdu (dotnet/aspnetcore
#53920).
Angular örnek uygulamalar
- CustomElementsBlazorSample () (Blazor Server
javiercn/CustomElementsBlazorSample
, dal:blazor-server
): Blazor Server .NET 8'de desteklenir. Bu .NET 7 örneğini .NET 8'e geçirmek için bkz . ASP.NET Core 7.0'dan 8.0'a geçirme. - CustomElementsBlazorSample () (
javiercn/CustomElementsBlazorSample
Blazor WebAssembly, dal:blazor-wasm
): Bu .NET 7 örneğini .NET 8'e geçirmek için bkz. ASP.NET Core 7.0'dan 8.0'a geçirme.
JavaScript'ten Razor bileşenlerini işleme
Razor bileşenleri mevcut JS uygulamaları için JavaScript'ten (JS) dinamik olarak işlenebilir.
Bu bölümdeki örnek, aracılığıyla JSaşağıdaki Razor bileşeni bir sayfaya işler.
Quote.razor
:
<div class="m-5 p-5">
<h2>Quote</h2>
<p>@Text</p>
</div>
@code {
[Parameter]
public string? Text { get; set; }
}
Program
dosyasında, bileşenin konumu için ad alanını ekleyin.
Bir bileşeni işleme için kök bileşen olarak kaydetmek Razor için JS uygulamanın kök bileşen koleksiyonunda çağrısı RegisterForJavaScript yapın.
RegisterForJavaScriptbaşlatma mantığını (javaScriptInitializer
) yürüten bir işlevin adını kabul eden bir JS aşırı yükleme içerir. İşlev JS , uygulama başlatıldıktan hemen sonra Blazor ve herhangi bir bileşen işlenmeden önce bileşen kaydı başına bir kez çağrılır. Bu işlev, HTML özel öğeleri veya tabanlı SPA JSçerçevesi gibi teknolojilerle JS tümleştirme için kullanılabilir.
Farklı bileşen kayıtları tarafından bir veya daha fazla başlatıcı işlevi oluşturulabilir ve çağrılabilir. Tipik kullanım örneği, başlatıcı işlevinin özel öğelerle veya başka bir tabanlı SPA çerçevesiyle tümleştirmeyi yapılandırıyorsa beklenen birden çok bileşen için aynı başlatıcı işlevini yeniden JSkullanmaktır.
Önemli
parametresini javaScriptInitializer
RegisterForJavaScript JavaScript başlatıcılarıyla karıştırmayın. Parametrenin adı ve JS başlatıcılar özelliği tesadüfidir.
Aşağıdaki örnek, önceki Quote
bileşenin tanımlayıcı olarak "quote
" ile dinamik kaydını gösterir.
Bir Blazor Server uygulamada, dosyasında öğesinin çağrısını AddServerSideBlazor
Program
değiştirin:builder.Services.AddServerSideBlazor(options => { options.RootComponents.RegisterForJavaScript<Quote>(identifier: "quote", javaScriptInitializer: "initializeComponent"); });
Bir Blazor WebAssembly uygulamada, istemci tarafı
Program
dosyasında şu çağrıyı açın RegisterForJavaScript RootComponents:builder.RootComponents.RegisterForJavaScript<Quote>(identifier: "quote", javaScriptInitializer: "initializeComponent");
başlatıcı işlevini name
ve parameters
işlev parametrelerini nesnesine window
ekleyin. Gösterim amacıyla, aşağıdaki initializeComponent
işlev kayıtlı bileşenin adını ve parametrelerini günlüğe kaydeder.
wwwroot/jsComponentInitializers.js
:
window.initializeComponent = (name, parameters) => {
console.log({ name: name, parameters: parameters });
}
Bileşen JS parametrelerini gerektiği gibi geçirerek kayıtlı tanımlayıcıyı kullanarak bileşenini bir kapsayıcı öğesinde işleyin.
Aşağıdaki örnekte:
Quote
bileşen (quote
tanımlayıcı) işlevi çağrıldığında öğesindequoteContainer
showQuote
işlenir.- Bileşenin
Text
parametresine bir tırnak dizesi geçirilir.
wwwroot/scripts.js
:
window.showQuote = async () => {
let targetElement = document.getElementById('quoteContainer');
await Blazor.rootComponents.add(targetElement, 'quote',
{
text: "Crow: I have my doubts that this movie is actually 'starring' " +
"anybody. More like, 'camera is generally pointed at.'"
});
}
const btn = document.querySelector("#showQuoteBtn");
btn.addEventListener("click", showQuote);
Blazor Betik yüklendikten sonra, önceki betikleri JS uygulamaya yükleyin:
<script src="_framework/{BLAZOR SCRIPT}"></script>
<script src="jsComponentInitializers.js"></script>
<script src="scripts.js"></script>
Yukarıdaki örnekte yer {BLAZOR SCRIPT}
tutucu betiktir Blazor .
HTML'de hedef kapsayıcı öğesini (quoteContainer
yerleştirin). Bu bölümdeki tanıtım için bir düğme, işlevi çağırarak bileşenin Quote
işlenmesini showQuote
JS tetikler:
<button id="showQuoteBtn">Show Quote</button>
<div id="quoteContainer"></div>
Herhangi bir bileşen işlenmeden önce başlatma sırasında, tarayıcının geliştirici araçları konsolu şu çağrıldığında initializeComponent
bileşenin Quote
tanımlayıcısını (name
) ve parametrelerini (parameters
) günlüğe kaydeder:
Object { name: "quote", parameters: (1) […] }
name: "quote"
parameters: Array [ {…} ]
0: Object { name: "Text", type: "string" }
length: 1
Show Quote Düğme seçildiğinde bileşen, Quote
içinde depolanan Text
alıntıyla işlenir:
Alıntı ©1988-1999 Satellite of Love LLC: Mystery Science Theater 3000 (Trace Beaulieu (Crow))
Not
rootComponents.add
bileşenin bir örneğini döndürür. dispose
Örneği serbest bırakmak için çağrısı:
const rootComponent = await window.Blazor.rootComponents.add(...);
...
rootComponent.dispose();
Yukarıdaki örnek, işlev çağrıldığında showQuote()
JS kök bileşeni dinamik olarak işler. Başlangıç sırasında Blazor bir kök bileşeni kapsayıcı öğesinde işlemek için, aşağıdaki örnekte gösterildiği gibi bileşeni işlemek için javascript başlatıcısını kullanın.
Aşağıdaki örnek, önceki örnekte bileşeni, dosyadaki Program
kök bileşen kaydını ve başlatmasını kullanarak Quote
derlenirjsComponentInitializers.js
. showQuote()
İşlev (ve script.js
dosyası) kullanılmaz.
HTML'de hedef kapsayıcı öğesini yerleştirin, quoteContainer2
örneğin:
<div id="quoteContainer2"></div>
JavaScript başlatıcısı kullanarak kök bileşeni hedef kapsayıcı öğesine ekleyin.
wwwroot/{PACKAGE ID/ASSEMBLY NAME}.lib.module.js
:
export function afterStarted(blazor) {
let targetElement = document.getElementById('quoteContainer2');
blazor.rootComponents.add(targetElement, 'quote',
{
text: "Crow: I have my doubts that this movie is actually 'starring' " +
"anybody. More like, 'camera is generally pointed at.'"
});
}
Not
çağrısı içinrootComponents.add
, başlangıç olayı tarafından Blazor sağlanan parametresini (küçük harfb
) kullanınblazor
. Nesne (büyük harfB
) kullanılırken Blazor
kayıt geçerli olsa da, tercih edilen yaklaşım parametresini kullanmaktır.
Ek özellikler içeren gelişmiş bir örnek için ASP.NET Core başvuru kaynağındaki (dotnet/aspnetcore
GitHub deposu) örneğe BasicTestApp
bakın:
Not
.NET başvuru kaynağına yönelik belge bağlantıları genellikle deponun varsayılan dalını yükler ve bu dal .NET'in sonraki sürümü için geçerli geliştirmeyi temsil eder. Belirli bir sürümün etiketini seçmek için Dalları veya etiketleri değiştir açılan listesini kullanın. Daha fazla bilgi için bkz. ASP.NET Core kaynak kodunun sürüm etiketini seçme (dotnet/AspNetCore.Docs #26205).
Blazor özel öğeleri
Angular veya React gibi diğer SPA çerçevelerindeki bileşenleri dinamik olarak işlemek Razor için özel öğeleri kullanınBlazor.
Blazor özel öğeler:
- Özel HTML öğelerini uygulamak için standart HTML arabirimlerini kullanın.
- JavaScript API'lerini kullanarak kök Razor bileşenlerin durumunu ve yaşam döngüsünü el ile yönetme gereksinimini ortadan kaldırın.
- Bileşenleri diğer SPA çerçevelerinde yazılmış mevcut projelere aşamalı olarak tanıtmak Razor için kullanışlıdır.
Özel öğeler alt içeriği veya şablonlu bileşenleri desteklemez.
Öğe adı
HTML belirtimi gereği, özel öğe etiketi adları kebap büyük/küçük harflerini benimsemelidir:
Geçersiz: mycounter
Geçersiz: MY-COUNTER
Geçersiz: MyCounter
Geçerli: my-counter
Geçerli: my-cool-counter
Paket
Uygulamanın proje dosyasına için Microsoft.AspNetCore.Components.CustomElements
bir paket başvurusu ekleyin.
Not
.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri) paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.
Örnek bileşen
Aşağıdaki örnekler proje şablonundaki Counter
bileşeni Blazor temel alır.
Counter.razor
:
@page "/counter"
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount() => currentCount++;
}
Blazor Server kayıt
Bir kök bileşeni bir uygulamaya özel öğe Blazor Server olarak kaydetmek için aşağıdaki adımları uygulayın.
Ad alanını Microsoft.AspNetCore.Components.Web dosyanın en üstüne Program
ekleyin:
using Microsoft.AspNetCore.Components.Web;
Uygulamanın bileşenleri için bir ad alanı ekleyin. Aşağıdaki örnekte, uygulamanın ad alanıdır BlazorSample
ve bileşenler klasörde bulunur Pages
:
using BlazorSample.Pages;
çağrısında değişiklik yapma AddServerSideBlazor. Bağlantı hattı seçeneğinde RootComponents ile RegisterCustomElement özel öğesini belirtin. Aşağıdaki örnek, bileşeni özel HTML öğesiyle my-counter
kaydederCounter
:
builder.Services.AddServerSideBlazor(options =>
{
options.RootComponents.RegisterCustomElement<Counter>("my-counter");
});
Blazor WebAssembly kayıt
Bir kök bileşeni bir uygulamaya özel öğe Blazor WebAssembly olarak kaydetmek için aşağıdaki adımları uygulayın.
Ad alanını Microsoft.AspNetCore.Components.Web dosyanın en üstüne Program
ekleyin:
using Microsoft.AspNetCore.Components.Web;
Uygulamanın bileşenleri için bir ad alanı ekleyin. Aşağıdaki örnekte, uygulamanın ad alanıdır BlazorSample
ve bileşenler klasörde bulunur Pages
:
using BlazorSample.Pages;
üzerinde RootComponentsarayınRegisterCustomElement. Aşağıdaki örnek, bileşeni özel HTML öğesiyle my-counter
kaydederCounter
:
builder.RootComponents.RegisterCustomElement<Counter>("my-counter");
Kayıtlı özel öğeyi kullanma
Özel öğeyi herhangi bir web çerçevesiyle kullanın. Örneğin, uygulamanın Counter
bileşenini işleyen önceki my-counter
özel HTML öğesi react uygulamasında aşağıdaki işaretlemeyle kullanılır:
<my-counter></my-counter>
ile Blazorözel öğelerin nasıl oluşturulacağını gösteren tam bir örnek için başvuru kaynağındaki bileşene bakınCustomElementsComponent
.
Not
.NET başvuru kaynağına yönelik belge bağlantıları genellikle deponun varsayılan dalını yükler ve bu dal .NET'in sonraki sürümü için geçerli geliştirmeyi temsil eder. Belirli bir sürümün etiketini seçmek için Dalları veya etiketleri değiştir açılan listesini kullanın. Daha fazla bilgi için bkz. ASP.NET Core kaynak kodunun sürüm etiketini seçme (dotnet/AspNetCore.Docs #26205).
Parametre geçirme
Bileşenlerinize Razor PARAMETRELERI HTML öznitelikleri olarak veya DOM öğesinde JavaScript özellikleri olarak geçirin.
Aşağıdaki Counter
bileşen, düğmenin artım miktarını Click me ayarlamak için bir IncrementAmount
parametre kullanır.
Counter.razor
:
@page "/counter"
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
[Parameter]
public int IncrementAmount { get; set; } = 1;
private void IncrementCount()
{
currentCount += IncrementAmount;
}
}
Counter
Bileşeni özel öğeyle işleyin ve parametreye IncrementAmount
HTML özniteliği olarak bir değer geçirin. Öznitelik adı kebab-case söz dizimini (increment-amount
değil IncrementAmount
) benimser:
<my-counter increment-amount="10"></my-counter>
Alternatif olarak, parametrenin değerini öğe nesnesinde JavaScript özelliği olarak ayarlayabilirsiniz. Özellik adı, camel case söz dizimini (incrementAmount
değil):IncrementAmount
const elem = document.querySelector("my-counter");
elem.incrementAmount = 10;
Parametre değerlerini istediğiniz zaman öznitelik veya özellik söz dizimi kullanarak güncelleştirebilirsiniz.
Desteklenen parametre türleri:
- JavaScript özellik söz dizimini kullanarak herhangi bir JSON serileştirilebilir türündeki nesneleri geçirebilirsiniz.
- HTML özniteliklerini kullanarak dize, boole veya sayısal türlerdeki nesneleri geçirmekle sınırlısınız.
Microsoft.AspNetCore.Components.CustomElements
NuGet paketi kullanılarak özel öğeler oluşturmak için deneme desteği sağlanır. Özel öğeler, özel HTML öğelerini uygulamak için standart HTML arabirimlerini kullanır.
Uyarı
Deneysel özellikler, özelliğin uygulanabilirliğini incelemek amacıyla kullanılır ve kararlı bir sürümde gönderilmeyebilir.
Bir kök bileşeni özel öğe olarak kaydedin:
Bir Blazor Server uygulamada, dosyasında çağrısında öğesinin çağrısını
Program
AddServerSideBlazor değiştirerek öğesini çağırın RegisterCustomElement CircuitOptions.RootComponents:builder.Services.AddServerSideBlazor(options => { options.RootComponents.RegisterCustomElement<Counter>("my-counter"); });
Not
Yukarıdaki kod örneği, uygulamanın bileşenleri (örneğin,
using BlazorSample.Components.Pages;
) içinProgram
dosyasında bir ad alanı gerektirir.Bir Blazor WebAssembly uygulamada, dosyada şu çağrıyı açın WebAssemblyHostBuilder.RootComponents RegisterCustomElement
Program
:builder.RootComponents.RegisterCustomElement<Counter>("my-counter");
Not
Yukarıdaki kod örneği, uygulamanın bileşenleri (örneğin,
using BlazorSample.Components.Pages;
) içinProgram
dosyasında bir ad alanı gerektirir.
Uygulamanın HTML'sinde Blazor betiği etiketinden önce aşağıdaki <script>
etiketini ekleyin:
<script src="/_content/Microsoft.AspNetCore.Components.CustomElements/BlazorCustomElements.js"></script>
Özel öğeyi herhangi bir web çerçevesiyle kullanın. Örneğin yukarıdaki counter özel öğesi aşağıdaki işaretlemeyle bir React uygulaması içinde kullanılmıştır:
<my-counter increment-amount={incrementAmount}></my-counter>
Uyarı
Özel öğeler özelliği şu anda deneyseldir, desteklenmemektedir ve herhangi bir anda değiştirilebilir. Bu belirli yaklaşımın gereksinimlerinizi ne kadar karşıladığına ilişkin geri bildirimlerinizi bekliyoruz.
Angular ve React bileşenleri oluşturma
Angular veya React gibi web çerçeveleri için Razor bileşenlerinden çerçeveye özgü JavaScript (JS) bileşenleri oluşturun. Bu özellik .NET'e dahil değildir, ancak bileşeni işleme Razor JSdesteği tarafından etkinleştirilir. GitHub'da JS bileşeni oluşturma örneği, Razor bileşenlerinden Angular ve React bileşenleri oluşturmayı gösterir. Ek bilgi için GitHub örnek uygulamasının README.md
dosyasına bakın.
Uyarı
Angular ve React bileşeni özellikleri şu anda deneyseldir, desteklenmemektedir ve herhangi bir anda değiştirilebilir. Bu belirli yaklaşımın gereksinimlerinizi ne kadar karşıladığına ilişkin geri bildirimlerinizi bekliyoruz.
ASP.NET Core