ุงู„ู…ูŠุฒุงุช ุงู„ุฌุฏูŠุฏุฉ ููŠ Blazor 0.7.0

Blazor 0.7.0 ู…ุชุงุญ ุงู„ุขู†! ูŠุฑูƒุฒ ู‡ุฐุง ุงู„ุชุญุฏูŠุซ ุนู„ู‰ ADRs (ุงู„ุนู„ุงู‚ุงุช ุจูŠู† ุงู„ุฃุฌุฏุงุฏ ูˆุงู„ุณู„ูŠู„). ุจุงู„ุฅุถุงูุฉ ุฅู„ู‰ ุฐู„ูƒ ุŒ ุฃุถูู†ุง ุจุนุถ ุงู„ุชุญุณูŠู†ุงุช ุนู„ู‰ ุนู…ู„ูŠุฉ ุงู„ุชุตุญูŠุญ. ู…ุฒูŠุฏ ู…ู† ุงู„ุชูุงุตูŠู„ ุชุญุช ุงู„ุฎูุถ!

ู†ุจุฐุฉ ุนู† Blazor: ุฅุทุงุฑ ุนู…ู„ ู„ุชุทุจูŠู‚ุงุช ุงู„ู…ุชุตูุญ ู…ูƒุชูˆุจุฉ ููŠ .NET ูˆุชู… ุฅุทู„ุงู‚ู‡ุง ุจุงุณุชุฎุฏุงู… WebAssembly. ูŠู…ู†ุญูƒ ุฌู…ูŠุน ู…ุฒุงูŠุง ุงู„ุชุทุจูŠู‚ุงุช ุงู„ุญุฏูŠุซุฉ ุฐุงุช ุงู„ุตูุญุฉ ุงู„ูˆุงุญุฏุฉ (SPA) ุŒ ุจูŠู†ู…ุง ูŠุณู…ุญ ู„ูƒ ุจุงุณุชุฎุฏุงู… .NET ู…ู† ุงู„ุจุฏุงูŠุฉ ุฅู„ู‰ ุงู„ู†ู‡ุงูŠุฉ ุŒ ูˆุตูˆู„ุงู‹ ุฅู„ู‰ ุงู„ุชุนู„ูŠู…ุงุช ุงู„ุจุฑู…ุฌูŠุฉ ุงู„ุดุงุฆุนุฉ ุนู„ู‰ ุงู„ุฎุงุฏู… ูˆุงู„ุนู…ูŠู„. [ 1 ]



ู…ู‚ุฏู…ุฉ ุตุบูŠุฑุฉ ุฃูˆ "ู…ุง ู‡ูˆ BlazorุŸ" .

ุฅู„ูŠูƒ ุงู„ู…ูŠุฒุงุช ุงู„ุฌุฏูŠุฏุฉ ููŠ Blazor 0.7.0:

  • ุงู„ู‚ูŠู… ูˆุงู„ู…ุนู„ู…ุงุช ุงู„ู…ุชุชุงู„ูŠุฉ
  • ุชุญุณูŠู†ุงุช ุงู„ุชุตุญูŠุญ

ูŠู…ูƒู† ุงู„ุนุซูˆุฑ ุนู„ู‰ ู‚ุงุฆู…ุฉ ูƒุงู…ู„ุฉ ุจุงู„ุชุบูŠูŠุฑุงุช ููŠ ู‡ุฐุง ุงู„ุฅุตุฏุงุฑ ููŠ ู…ู„ุงุญุธุงุช ุงู„ุฅุตุฏุงุฑ Blazor 0.7.0 .

ุงุญุตู„ ุนู„ู‰ Blazor 0.7.0


ู‚ู… ุจุชุซุจูŠุช ู…ุง ูŠู„ูŠ:

  1. .NET Core 2.1 SDK (2.1.500 ุฃูˆ ุฃุญุฏุซ).
  2. Visual Studio 2017 (15.9 ุฃูˆ ุฃุญุฏุซ) ู…ุน ASP.NET.
  3. ุฃุญุฏุซ ู…ู„ุญู‚ Blazor Language Services ู…ู† Visual Studio Marketplace.
  4. ู‚ูˆุงู„ุจ Blazor ููŠ ุณุทุฑ ุงู„ุฃูˆุงู…ุฑ:

dotnet new -i Microsoft.AspNetCore.Blazor.Templates 

ูŠู…ูƒู†ูƒ ุงู„ุนุซูˆุฑ ุนู„ู‰ ุงู„ุชุนู„ูŠู…ุงุช ูˆุงู„ูˆุซุงุฆู‚ ูˆุงู„ุฃุฏู„ุฉ ุงู„ุฎุงุตุฉ ุจู€ Blazor ุนู„ู‰ blazor.net .

ุชุฑู‚ูŠุฉ ู…ุดุฑูˆุน ู…ูˆุฌูˆุฏ ุฅู„ู‰ Blazor 0.7.0


ู„ุชุฑู‚ูŠุฉ ู…ุดุฑูˆุน Blazor 0.6.0 ุฅู„ู‰ 0.7.0:

  • ู‚ู… ุจุชุนูŠูŠู† ุงู„ู…ุชุทู„ุจุงุช ุงู„ู…ุฐูƒูˆุฑุฉ ุฃุนู„ุงู‡.
  • ู‚ู… ุจุชุญุฏูŠุซ ุญุฒู… Blazor ูˆู…ุฑุงุฌุน ุฃุฏุงุฉ .NET CLI ุฅู„ู‰ 0.7.0. ูŠุฌุจ ุฃู† ูŠุจุฏูˆ ู…ู„ู ู…ุดุฑูˆุน Blazor ุงู„ู…ุญุฏุซ ูƒู…ุง ูŠู„ูŠ:

 <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <RunCommand>dotnet</RunCommand> <RunArguments>blazor serve</RunArguments> <LangVersion>7.3</LangVersion> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Blazor.Browser" Version="0.7.0" /> <PackageReference Include="Microsoft.AspNetCore.Blazor.Build" Version="0.7.0" /> <DotNetCliToolReference Include="Microsoft.AspNetCore.Blazor.Cli" Version="0.7.0" /> </ItemGroup> </Project> 

ู‡ุฐุง ู‡ูˆ! ุงู„ุขู† ูŠู…ูƒู†ูƒ ุชู‚ูŠูŠู… ุฃุญุฏุซ ู…ูŠุฒุงุช Blazor.

ุงู„ู‚ูŠู… ูˆุงู„ู…ุนู„ู…ุงุช ุงู„ู…ุชุชุงู„ูŠุฉ


ูŠู…ูƒู† ู„ู…ูƒูˆู†ุงุช Blazor ู‚ุจูˆู„ ุงู„ู…ุนู„ู…ุงุช ุงู„ุชูŠ ูŠู…ูƒู† ุงุณุชุฎุฏุงู…ู‡ุง ู„ู†ู‚ู„ ุงู„ุจูŠุงู†ุงุช ุฅู„ู‰ ุงู„ู…ูƒูˆู† ูˆุงู„ุชุฃุซูŠุฑ ุนู„ู‰ ุนุฑุถ ุงู„ู…ูƒูˆู†. ูŠุชู… ุชูˆููŠุฑ ู‚ูŠู… ุงู„ู…ุนู„ู…ุงุช ู…ู† ุงู„ู…ูƒูˆู† ุงู„ุฃุตู„ูŠ ุฅู„ู‰ ุงู„ู…ูƒูˆู† ุงู„ูุฑุนูŠ. ูˆู…ุน ุฐู„ูƒ ุŒ ููŠ ุจุนุถ ุงู„ุฃุญูŠุงู† ุŒ ูŠูƒูˆู† ู…ู† ุบูŠุฑ ุงู„ู…ู†ุงุณุจ ู†ู‚ู„ ุงู„ุจูŠุงู†ุงุช ู…ู† ู…ูƒูˆู† ุณู„ู ุฅู„ู‰ ู…ูƒูˆู† ุณู„ูŠู„ ุŒ ุฎุงุตุฉ ุนู†ุฏู…ุง ูŠูƒูˆู† ู‡ู†ุงูƒ ุงู„ุนุฏูŠุฏ ู…ู† ุงู„ุทุจู‚ุงุช ุจูŠู†ู‡ู…ุง. ุชุญู„ ุงู„ู‚ูŠู… ูˆุงู„ู…ุนู„ู…ุงุช ุงู„ู…ุชุชุงู„ูŠุฉ ู‡ุฐู‡ ุงู„ู…ุดูƒู„ุฉ ู…ู† ุฎู„ุงู„ ุชูˆููŠุฑ ุทุฑูŠู‚ุฉ ู…ู†ุงุณุจุฉ ู„ู…ูƒูˆู† ุงู„ุณู„ู ู„ุชู‚ุฏูŠู… ู‚ูŠู…ุฉ ุชูƒูˆู† ู…ุชุงุญุฉ ุจุนุฏ ุฐู„ูƒ ู„ุฌู…ูŠุน ุงู„ู…ูƒูˆู†ุงุช ุงู„ู…ุชุณุงู‚ุทุฉ. ูƒู…ุง ุฃู†ู‡ุง ุชูˆูุฑ ุทุฑูŠู‚ุฉ ุฑุงุฆุนุฉ ู„ุชู†ุณูŠู‚ ุงู„ู…ูƒูˆู†ุงุช.

ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ุฅุฐุง ูƒู†ุช ุชุฑุบุจ ููŠ ุชู‚ุฏูŠู… ุจุนุถ ุงู„ู…ุนู„ูˆู…ุงุช ุญูˆู„ ู…ูˆุถูˆุน ู„ุฌุฒุก ู…ุนูŠู† ู…ู† ุงู„ุชุทุจูŠู‚ ุงู„ุฎุงุต ุจูƒ ุŒ ูŠู…ูƒู†ูƒ ุชู…ุฑูŠุฑ ุงู„ุฃู†ู…ุงุท ูˆุงู„ูุฆุงุช ุงู„ู…ู†ุงุณุจุฉ ู…ู† ู…ูƒูˆู† ุฅู„ู‰ ู…ูƒูˆู† ุŒ ูˆู„ูƒู† ู‡ุฐุง ุณูŠูƒูˆู† ู…ู…ู„ุงู‹ ูˆูŠุณุชุบุฑู‚ ูˆู‚ุชู‹ุง ุทูˆูŠู„ุงู‹. ุจุฏู„ุงู‹ ู…ู† ุฐู„ูƒ ุŒ ูŠู…ูƒู† ุฃู† ูŠูˆูุฑ ุงู„ู…ูƒูˆู† ุงู„ุฑุฆูŠุณูŠ ุงู„ุนุงู… ู…ุนู„ูˆู…ุงุช ุงู„ู…ูˆุถูˆุน ูƒู‚ูŠู…ุฉ ู…ุชุชุงู„ูŠุฉ ูŠู…ูƒู† ู„ู„ุฃุญูุงุฏ ู‚ุจูˆู„ู‡ุง ูƒู…ุนู„ู…ุฉ ู…ุชุชุงู„ูŠุฉ ุซู… ุงุณุชุฎุฏุงู…ู‡ุง ุนู†ุฏ ุงู„ุญุงุฌุฉ.

ุงูุชุฑุถ ุฃู† ูุฆุฉ ThemeInfo ุชู†ู‚ู„ ุฌู…ูŠุน ุงู„ู…ุนู„ูˆู…ุงุช ุญูˆู„ ู…ูˆุถูˆุน ุชุฑูŠุฏ ู†ู‚ู„ู‡ ู…ู† ุฎู„ุงู„ ุงู„ุชุณู„ุณู„ ุงู„ู‡ุฑู…ูŠ ู„ู„ู…ูƒูˆู†ุงุช ุจุญูŠุซ ูŠูƒูˆู† ู„ุฌู…ูŠุน ุงู„ุฃุฒุฑุงุฑ ุงู„ู…ูˆุฌูˆุฏุฉ ููŠ ู‡ุฐุง ุงู„ุฌุฒุก ู…ู† ุงู„ุชุทุจูŠู‚ ู†ูุณ ุงู„ู…ุธู‡ุฑ:

 public class ThemeInfo { public string ButtonClass { get; set; } } 

ูŠู…ูƒู† ุฃู† ูŠูˆูุฑ ุงู„ู…ูƒูˆู† ุงู„ุฃุตู„ูŠ ู‚ูŠู…ุฉ ู…ุชุชุงู„ูŠุฉ ุจุงุณุชุฎุฏุงู… ู…ูƒูˆู† CascadingValue . ูŠู„ู ู…ูƒูˆู† CascadingValue ุดุฌุฑุฉ ูุฑุนูŠุฉ ู…ู† ุงู„ุชุณู„ุณู„ ุงู„ู‡ุฑู…ูŠ ู„ู„ู…ูƒูˆู†ุงุช ูˆูŠุนูŠู‘ู† ู‚ูŠู…ุฉ ูˆุงุญุฏุฉ ุณุชูƒูˆู† ู…ุชุงุญุฉ ู„ุฌู…ูŠุน ุงู„ู…ูƒูˆู†ุงุช ุฏุงุฎู„ ู‡ุฐู‡ ุงู„ุดุฌุฑุฉ ุงู„ูุฑุนูŠุฉ. ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ูŠู…ูƒู†ู†ุง ุชุญุฏูŠุฏ ู…ุนู„ูˆู…ุงุช ุงู„ู…ูˆุถูˆุน ูƒู…ุนู„ู…ุฉ ู…ุชุชุงู„ูŠุฉ ู„ุฌู…ูŠุน ุงู„ู…ูƒูˆู†ุงุช ุงู„ุชูŠ ูŠุชูƒูˆู† ู…ู†ู‡ุง ู†ุต ุงู„ุชุฎุทูŠุท:

 @inherits BlazorLayoutComponent <div class="sidebar"> <NavMenu /> </div> <div class="main"> <div class="top-row px-4"> <a href="http://blazor.net" target="_blank" class="ml-md-auto">About</a> </div> <CascadingValue Value="@theme"> <div class="content px-4"> @Body </div> </CascadingValue> </div> @functions { ThemeInfo theme = new ThemeInfo { ButtonClass = "btn-success" }; } 

ู„ุงุณุชุฎุฏุงู… ุงู„ู‚ูŠู… ุงู„ู…ุชุชุงู„ูŠุฉ ุŒ ูŠู…ูƒู† ู„ู„ู…ูƒูˆู†ุงุช ุชุนุฑูŠู ู…ุนู„ู…ุงุช ุงู„ู…ุชุชุงู„ูŠุฉ ุจุงุณุชุฎุฏุงู… ุงู„ุณู…ุฉ [CascadingParameter]. ุชุฑุชุจุท ุงู„ู‚ูŠู… ุงู„ู…ุชุชุงู„ูŠุฉ ุจู…ุนู„ู…ุงุช ุงู„ู…ุชุชุงู„ูŠุฉ ุญุณุจ ุงู„ู†ูˆุน. ููŠ ุงู„ู…ุซุงู„ ุงู„ุชุงู„ูŠ ุŒ ุชู… ุชุนุฏูŠู„ ู…ูƒูˆู† ุงู„ุนุฏุงุฏ ู„ูŠูƒูˆู† ู„ู‡ ู…ุนู„ู…ุฉ ู…ุชุชุงู„ูŠุฉ ุชุฑุชุจุท ุจุงู„ู‚ูŠู…ุฉ ุงู„ู…ุชุชุงู„ูŠุฉ ู„ู€ ThemeInfo ุŒ ูˆุงู„ุชูŠ ูŠุชู… ุงุณุชุฎุฏุงู…ู‡ุง ุจุนุฏ ุฐู„ูƒ ู„ุชุนูŠูŠู† ูุฆุฉ ุงู„ุฒุฑ.

 @page "/counter" <h1>Counter</h1> <p>Current count: @currentCount</p> <button class="btn @ThemeInfo.ButtonClass" onclick="@IncrementCount">Click me</button> @functions { int currentCount = 0; [CascadingParameter] protected ThemeInfo ThemeInfo { get; set; } void IncrementCount() { currentCount++; } } 

ุนู†ุฏู…ุง ู†ุทู„ู‚ ุงู„ุชุทุจูŠู‚ ุŒ ู†ุฑู‰ ุฃู†ู‡ ูŠุชู… ุชุทุจูŠู‚ ู†ู…ุท ุฌุฏูŠุฏ:



ุชุณู…ุญ ุงู„ุฎูŠุงุฑุงุช ุงู„ู…ุชุชุงู„ูŠุฉ ุฃูŠุถู‹ุง ู„ู„ู…ูƒูˆู†ุงุช ุจุงู„ุชูุงุนู„ ููŠ ู‡ุฑู…ูŠุฉ ุงู„ู…ูƒูˆู†ุงุช. ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ุงูุชุฑุถ ุฃู† ู„ุฏูŠูƒ ู…ูƒูˆู† TabSet ูŠุญุชูˆูŠ ุนู„ู‰ ุงู„ุนุฏูŠุฏ ู…ู† ู…ูƒูˆู†ุงุช Tab:

 <TabSet> <Tab Title="First tab"> <h4>First tab</h4> This is the first tab. </Tab> @if (showSecondTab) { <Tab Title="Second"> <h4>Second tab</h4> You can toggle me. </Tab> } <Tab Title="Third"> <h4>Third tab</h4> <label> <input type="checkbox" bind=@showSecondTab /> Toggle second tab </label> </Tab> </TabSet> 

ููŠ ู‡ุฐุง ุงู„ู…ุซุงู„ ุŒ ู„ุง ูŠุชู… ุชู…ุฑูŠุฑ ู…ูƒูˆู†ุงุช Tab ุงู„ูุฑุนูŠุฉ ุจุดูƒู„ ุตุฑูŠุญ ูƒู…ุนู„ู…ุงุช ุฅู„ู‰ TabSet. ุจุฏู„ุงู‹ ู…ู† ุฐู„ูƒ ุŒ ูู‡ูŠ ุจุจุณุงุทุฉ ุฌุฒุก ู…ู† ู…ุญุชูˆู‰ ุชุงุจุน TabSet. ูˆู„ูƒู† ู„ุง ุชุฒุงู„ TabSet ุจุญุงุฌุฉ ุฅู„ู‰ ู…ุนุฑูุฉ ูƒู„ ุนู„ุงู…ุฉ ุชุจูˆูŠุจ ุญุชู‰ ุชุชู…ูƒู† ู…ู† ุนุฑุถ ุงู„ุฑุคูˆุณ ูˆุนู„ุงู…ุฉ ุงู„ุชุจูˆูŠุจ ุงู„ู†ุดุทุฉ. ู„ุชู…ูƒูŠู† ู‡ุฐุง ุงู„ุชู†ุณูŠู‚ ุฏูˆู† ุงู„ุญุงุฌุฉ ุฅู„ู‰ ุฃูŠ ุงุชุตุงู„ ู…ุณุชุฎุฏู… ู…ุญุฏุฏ ุŒ ูŠู…ูƒู† ุฃู† ูŠู…ุซู„ ู…ูƒูˆู† TabSet ู†ูุณู‡ ูƒู‚ูŠู…ุฉ ู…ุชุชุงู„ูŠุฉ ุŒ ูˆุงู„ุชูŠ ูŠู…ูƒู† ุฃู† ุชุชุทุงุจู‚ ุจุนุฏ ุฐู„ูƒ ู…ุน ู…ูƒูˆู†ุงุช ู…ูƒูˆู† Tab:

ููŠ TabSet.cshtml:

 <!-- Display the tab headers --> <CascadingValue Value=this> <ul class="nav nav-tabs"> @ChildContent </ul> </CascadingValue> 

ูŠุณู…ุญ ู‡ุฐุง ู„ู…ูƒูˆู†ุงุช Tab ุงู„ุฃุตู„ูŠุฉ ุจุงู„ุชู‚ุงุท TabSet ุงู„ู…ุญุชูˆูŠุฉ ูƒู…ุนู„ู…ุฉ ู…ุชุชุงู„ูŠุฉ ุŒ ุจุญูŠุซ ูŠู…ูƒู†ู‡ุง ุฅุถุงูุฉ ู†ูุณู‡ุง ุฅู„ู‰ TabSet ูˆุชู†ุณูŠู‚ ุฃูŠ Tab ู†ุดุท:

ููŠ Tab.cshtml:

 [CascadingParameter] TabSet ContainerTabSet { get; set; } 


ุชุญู‚ู‚ ู…ู† ู†ู…ูˆุฐุฌ TabSet ุงู„ูƒุงู…ู„ ู‡ู†ุง .

ุชุญุณูŠู†ุงุช ุงู„ุชุตุญูŠุญ


ููŠ Blazor 0.5.0 ุŒ ุฃุถูู†ุง ุฏุนู…ู‹ุง ู„ุชุตุญูŠุญ ุฃุฎุทุงุก ุชุทุจูŠู‚ุงุช ุนู…ูŠู„ Blazor ููŠ ุงู„ู…ุณุชุนุฑุถ . ุนู„ู‰ ุงู„ุฑุบู… ู…ู† ุฃู† ู‡ุฐู‡ ุงู„ุชุฌุฑุจุฉ ุฃุธู‡ุฑุช ุฃู† ุชุตุญูŠุญ ุฃุฎุทุงุก ุชุทุจูŠู‚ุงุช .NET ููŠ ุงู„ู…ุณุชุนุฑุถ ุฃู…ุฑ ู…ู…ูƒู† ุŒ ูู‚ุฏ ูƒุงู†ุช ุชุฌุฑุจุฉ ุฎุทูŠุฑุฉ ุฅู„ู‰ ุญุฏ ู…ุง. ูŠู…ูƒู†ูƒ ุงู„ุขู† ุชุซุจูŠุช ู†ู‚ุงุท ุงู„ุชูˆู‚ู ูˆุฅุฒุงู„ุชู‡ุง ุจุดูƒู„ ุฃูƒุซุฑ ู…ูˆุซูˆู‚ูŠุฉ ุŒ ูƒู…ุง ุชู… ุชุญุณูŠู† ู…ูˆุซูˆู‚ูŠุฉ ุงู„ุชุตุญูŠุญ ุฎุทูˆุฉ ุจุฎุทูˆุฉ.

Source: https://habr.com/ru/post/ar430166/


All Articles