SlideShare a Scribd company logo
1 of 23
Blazor, en kjapp intro
Rune Andreas Grimstad, @runegri, rune@udelt.no
Blazor er ...
 Browser Razor
 SPA
 Webassembly
 .Net
 Tidlig teknologi, uferdig
Hvorfor?
 Ikke for å ta livet av Javascript!
 Valgfrihet i rammeverk og spark, fleksibilitet
 Gode utviklingsverktøy
 Gjenbruke kunnskap
 Gjenbruke kode
 (Fordi vi kan!)
Hvordan er dette mulig?
 WebAssembly og Mono
 Startet med å kjøre i DotNetAnywhere (DNA)
 Kjører nå i Mono, kompilert for WebAssembly
 Laster vanlige .NET-biblioteker (dll)
 Bruker fremdeles JS for DOM og mye annet
 Dette vil endre seg i framtidige versjoner av WebAssembly
Hvordan Blazor er oppbygd
 Komponenter
 Databinding
 Event handling
 Livssyklus
 Layouts
 Routing
 Dependency Injection
 Javascript interop
 Server-side
Kode!
Nytt prosjekt, gjennomgang
Komponenter
 Grunnsteinen i en Blazor-app
 Gjenbrukbare HTML-fragmenter
 Brukes som egne hjemmelagde HTML-tagger
 Kan ta parametre via [Parameter]
 Kan få innhold via parametre, må hete ChildContent
 Binding
Komponenter - Databinding
 For input-elementer bruker man syntaksen bind=“@propertynavn”
 Formattering via format-value
 Har en egen syntaks for databinding til komponenter
 bind-{propertynavn}
 Krever en parameter propertynavn og en tilhørende parameter av typen Action<>
{propertynavn}Changed
Komponenter - Event handling
 Kan håndtere de fleste vanlige events som OnClick, OnSubmit, OnChange, osv.
 Bruker vanlig binding-syntaks for å peke til en metode
 onclick=“@OnClickHandler”
 Noen eventer gir argumenter, event handler trenger ikke å ta i mot disse
 Kan bruke lamdametoder
 onclick=“@(e => something.something())”
Komponenter - livssyklus
 OnInit / OnInitAsync
 Fungerer i praksis som en konstruktør
 OnParametersSet / OnParametersSetAsync
 Før parametere settes i komponenten
 OnAfterRender / OnAfterRenderAsync
 Kalles etter komponenten er ferdig rendret
 Kalles også hvis komponenten oppdateres
 ShouldRender
 Kan overstyres for å kontrollere rendring av komponenten
 Kalles for å tvinge komponenten til å oppdatere seg
Komponenter - IDisposable
 Kan implementeres for å sikre opprydding av ressurser
 @implements IDisposable
 Dispose() {}
Komponenter – “code-behind”
 Kan implementere en klasse som arver fra BlazorComponent
 View må kalle @implements {klassenavn}
 Den ryddigste måten å skille design og implementasjon
Kode!
Gammel og ny kode i en herlig blanding...
Layouts
 Egentlig komponenter for sideoppsett
 Arver fra BlazorLayoutComponent
 @Body definerer innholdet i siden
 Komponenten bruker @layout for å markere hvilken layout som skal brukes
 Kan markere at alle komponenter i en mappe skal bruke samme layout via
_ViewImports.cshtml
Routing
 Bruker @page for å markere en url
 @page /route
 @page /route/{verdi}
 Krever en [Parameter] string Verdi {get; set;}
 NavLink rendrer en <a>-tag med klassen active satt eller ikke satt
Dependency Injection
 Veldig likt Asp.net Core
 services.Add / AddSingleton / AddTransient
 Constructor injection
 Komponenter via @inject eller [Inject] i kode
 Standardtjenester
 -IUriHelper
 HttpClient
Javascript interop
 IJSRuntime via JSRuntime.Current
 InvokeAsync<T>(metode, parameter1, ...)
 Kan kastes til IJSInProcessRuntime for Invoke<T>
 Alle JS-metoder må være scopet til window
Javascript interop – kjøre .Net fra JS
 DotNet.invokeMethod(assembly, metodenavn, parameter1, ...)
 DotNet.invokeMethodAsync
 Kaller en statisk metode, markert med [JSInvokable]
Hvordan kjøre Blazor?
 Som en komponent i en vanlig webside
 Evt i en Asp.Net Core-side
 Som en desktop applikasjon via Electron
 Som en terminal der programkoden kjører på serveren
 Via SignalR
Server-side Blazor
 Egen type prosjekt
 Bruker SignalR
 Akurat samme struktur og modell som “vanlig” Blazor
Kode!
Veldig kort gjennomgang av server-side Blazor
... også kom Blazor 0.6 på Tirsdag!
 Komponenter med maler
 F.eks. ListView med en mal for hvert list item
 RazorTemplates – små gjenbrukbare razor-snutter
 Støtte for Azure SignalR Service
 Denne vil hete Razor Components og blir en del av .Net Core 3.0!
Til slutt noen nyttige ressurser
 https://blazor.net/
 Her finner du stort sett alt
 http://learn-blazor.com/
 Alternativ ressurs for Blazor
 https://blogs.msdn.microsoft.com/webdev/category/blazor/
 Microsofts Blazor-blogg
 https://github.com/aspnet/Blazor
 Koden
 https://www.youtube.com/watch?v=MiLAE6HMr10
 Den første demoen av Blazor, på NDC 2017

More Related Content

Similar to Blazor - en kjapp intro

Smidig data på stortinget
Smidig data på stortingetSmidig data på stortinget
Smidig data på stortingetmumitrollet72
 
Objektorientering og design av kode
Objektorientering og design av kodeObjektorientering og design av kode
Objektorientering og design av kodeRune Sundling
 
Hypermedia
HypermediaHypermedia
Hypermediahamnis
 
BK2011 Introduksjon til arc gis desktop add ins
BK2011 Introduksjon til arc gis desktop add insBK2011 Introduksjon til arc gis desktop add ins
BK2011 Introduksjon til arc gis desktop add insGeodata AS
 
The Client Strikes Back
The Client Strikes BackThe Client Strikes Back
The Client Strikes BackMagnus Green
 
Progressive web applications i praksis
Progressive web applications i praksisProgressive web applications i praksis
Progressive web applications i praksisHåvard Wigtil
 
N2CMS presentation 2013-07-04
N2CMS presentation 2013-07-04N2CMS presentation 2013-07-04
N2CMS presentation 2013-07-04Svein Fidjestøl
 
Presentation Mapreduce Bjornnordlund
Presentation Mapreduce BjornnordlundPresentation Mapreduce Bjornnordlund
Presentation Mapreduce BjornnordlundBjørn Nordlund
 
Introduksjon til Spring Boot
Introduksjon til Spring BootIntroduksjon til Spring Boot
Introduksjon til Spring BootHenrik Schwarz
 
Hva Og Hvorfor Arkitektur - 11. mai 2010, Trondheim
Hva Og Hvorfor Arkitektur - 11. mai 2010, TrondheimHva Og Hvorfor Arkitektur - 11. mai 2010, Trondheim
Hva Og Hvorfor Arkitektur - 11. mai 2010, TrondheimEspen Johanson
 
Ikke test Puppet-koden din
Ikke test Puppet-koden dinIkke test Puppet-koden din
Ikke test Puppet-koden dinJan Ivar Beddari
 
Intro to Azure DevOps
Intro to Azure DevOpsIntro to Azure DevOps
Intro to Azure DevOpsAudunSolemdal
 
Introduksjon til Asterisk
Introduksjon til AsteriskIntroduksjon til Asterisk
Introduksjon til Asteriskmagg
 
Kryssplatform mobilutvikling
Kryssplatform mobilutviklingKryssplatform mobilutvikling
Kryssplatform mobilutviklingRunegri
 
Prototyping med Microsoft Web Matrix
Prototyping med Microsoft Web MatrixPrototyping med Microsoft Web Matrix
Prototyping med Microsoft Web MatrixØyvind Malin
 
Driftbarhet - Steg mot smidig drift, JavaZone 2010
Driftbarhet - Steg mot smidig drift, JavaZone 2010Driftbarhet - Steg mot smidig drift, JavaZone 2010
Driftbarhet - Steg mot smidig drift, JavaZone 2010ilmyggo
 
Notifikasjoner i en asynkron verden
Notifikasjoner i en asynkron verdenNotifikasjoner i en asynkron verden
Notifikasjoner i en asynkron verdenJoar Øyen
 
Tips og triks for enklere administrasjon av ArcGIS for Server
Tips og triks for enklere administrasjon av ArcGIS for ServerTips og triks for enklere administrasjon av ArcGIS for Server
Tips og triks for enklere administrasjon av ArcGIS for ServerGeodata AS
 

Similar to Blazor - en kjapp intro (20)

Smidig data på stortinget
Smidig data på stortingetSmidig data på stortinget
Smidig data på stortinget
 
Objektorientering og design av kode
Objektorientering og design av kodeObjektorientering og design av kode
Objektorientering og design av kode
 
Hypermedia
HypermediaHypermedia
Hypermedia
 
BK2011 Introduksjon til arc gis desktop add ins
BK2011 Introduksjon til arc gis desktop add insBK2011 Introduksjon til arc gis desktop add ins
BK2011 Introduksjon til arc gis desktop add ins
 
2011 09-13 j query workshop
2011 09-13 j query workshop2011 09-13 j query workshop
2011 09-13 j query workshop
 
The Client Strikes Back
The Client Strikes BackThe Client Strikes Back
The Client Strikes Back
 
Progressive web applications i praksis
Progressive web applications i praksisProgressive web applications i praksis
Progressive web applications i praksis
 
N2CMS presentation 2013-07-04
N2CMS presentation 2013-07-04N2CMS presentation 2013-07-04
N2CMS presentation 2013-07-04
 
Presentation Mapreduce Bjornnordlund
Presentation Mapreduce BjornnordlundPresentation Mapreduce Bjornnordlund
Presentation Mapreduce Bjornnordlund
 
Introduksjon til Spring Boot
Introduksjon til Spring BootIntroduksjon til Spring Boot
Introduksjon til Spring Boot
 
Hele butikken i skyen
Hele butikken i skyenHele butikken i skyen
Hele butikken i skyen
 
Hva Og Hvorfor Arkitektur - 11. mai 2010, Trondheim
Hva Og Hvorfor Arkitektur - 11. mai 2010, TrondheimHva Og Hvorfor Arkitektur - 11. mai 2010, Trondheim
Hva Og Hvorfor Arkitektur - 11. mai 2010, Trondheim
 
Ikke test Puppet-koden din
Ikke test Puppet-koden dinIkke test Puppet-koden din
Ikke test Puppet-koden din
 
Intro to Azure DevOps
Intro to Azure DevOpsIntro to Azure DevOps
Intro to Azure DevOps
 
Introduksjon til Asterisk
Introduksjon til AsteriskIntroduksjon til Asterisk
Introduksjon til Asterisk
 
Kryssplatform mobilutvikling
Kryssplatform mobilutviklingKryssplatform mobilutvikling
Kryssplatform mobilutvikling
 
Prototyping med Microsoft Web Matrix
Prototyping med Microsoft Web MatrixPrototyping med Microsoft Web Matrix
Prototyping med Microsoft Web Matrix
 
Driftbarhet - Steg mot smidig drift, JavaZone 2010
Driftbarhet - Steg mot smidig drift, JavaZone 2010Driftbarhet - Steg mot smidig drift, JavaZone 2010
Driftbarhet - Steg mot smidig drift, JavaZone 2010
 
Notifikasjoner i en asynkron verden
Notifikasjoner i en asynkron verdenNotifikasjoner i en asynkron verden
Notifikasjoner i en asynkron verden
 
Tips og triks for enklere administrasjon av ArcGIS for Server
Tips og triks for enklere administrasjon av ArcGIS for ServerTips og triks for enklere administrasjon av ArcGIS for Server
Tips og triks for enklere administrasjon av ArcGIS for Server
 

Blazor - en kjapp intro

  • 1. Blazor, en kjapp intro Rune Andreas Grimstad, @runegri, rune@udelt.no
  • 2. Blazor er ...  Browser Razor  SPA  Webassembly  .Net  Tidlig teknologi, uferdig
  • 3. Hvorfor?  Ikke for å ta livet av Javascript!  Valgfrihet i rammeverk og spark, fleksibilitet  Gode utviklingsverktøy  Gjenbruke kunnskap  Gjenbruke kode  (Fordi vi kan!)
  • 4. Hvordan er dette mulig?  WebAssembly og Mono  Startet med å kjøre i DotNetAnywhere (DNA)  Kjører nå i Mono, kompilert for WebAssembly  Laster vanlige .NET-biblioteker (dll)  Bruker fremdeles JS for DOM og mye annet  Dette vil endre seg i framtidige versjoner av WebAssembly
  • 5. Hvordan Blazor er oppbygd  Komponenter  Databinding  Event handling  Livssyklus  Layouts  Routing  Dependency Injection  Javascript interop  Server-side
  • 7. Komponenter  Grunnsteinen i en Blazor-app  Gjenbrukbare HTML-fragmenter  Brukes som egne hjemmelagde HTML-tagger  Kan ta parametre via [Parameter]  Kan få innhold via parametre, må hete ChildContent  Binding
  • 8. Komponenter - Databinding  For input-elementer bruker man syntaksen bind=“@propertynavn”  Formattering via format-value  Har en egen syntaks for databinding til komponenter  bind-{propertynavn}  Krever en parameter propertynavn og en tilhørende parameter av typen Action<> {propertynavn}Changed
  • 9. Komponenter - Event handling  Kan håndtere de fleste vanlige events som OnClick, OnSubmit, OnChange, osv.  Bruker vanlig binding-syntaks for å peke til en metode  onclick=“@OnClickHandler”  Noen eventer gir argumenter, event handler trenger ikke å ta i mot disse  Kan bruke lamdametoder  onclick=“@(e => something.something())”
  • 10. Komponenter - livssyklus  OnInit / OnInitAsync  Fungerer i praksis som en konstruktør  OnParametersSet / OnParametersSetAsync  Før parametere settes i komponenten  OnAfterRender / OnAfterRenderAsync  Kalles etter komponenten er ferdig rendret  Kalles også hvis komponenten oppdateres  ShouldRender  Kan overstyres for å kontrollere rendring av komponenten  Kalles for å tvinge komponenten til å oppdatere seg
  • 11. Komponenter - IDisposable  Kan implementeres for å sikre opprydding av ressurser  @implements IDisposable  Dispose() {}
  • 12. Komponenter – “code-behind”  Kan implementere en klasse som arver fra BlazorComponent  View må kalle @implements {klassenavn}  Den ryddigste måten å skille design og implementasjon
  • 13. Kode! Gammel og ny kode i en herlig blanding...
  • 14. Layouts  Egentlig komponenter for sideoppsett  Arver fra BlazorLayoutComponent  @Body definerer innholdet i siden  Komponenten bruker @layout for å markere hvilken layout som skal brukes  Kan markere at alle komponenter i en mappe skal bruke samme layout via _ViewImports.cshtml
  • 15. Routing  Bruker @page for å markere en url  @page /route  @page /route/{verdi}  Krever en [Parameter] string Verdi {get; set;}  NavLink rendrer en <a>-tag med klassen active satt eller ikke satt
  • 16. Dependency Injection  Veldig likt Asp.net Core  services.Add / AddSingleton / AddTransient  Constructor injection  Komponenter via @inject eller [Inject] i kode  Standardtjenester  -IUriHelper  HttpClient
  • 17. Javascript interop  IJSRuntime via JSRuntime.Current  InvokeAsync<T>(metode, parameter1, ...)  Kan kastes til IJSInProcessRuntime for Invoke<T>  Alle JS-metoder må være scopet til window
  • 18. Javascript interop – kjøre .Net fra JS  DotNet.invokeMethod(assembly, metodenavn, parameter1, ...)  DotNet.invokeMethodAsync  Kaller en statisk metode, markert med [JSInvokable]
  • 19. Hvordan kjøre Blazor?  Som en komponent i en vanlig webside  Evt i en Asp.Net Core-side  Som en desktop applikasjon via Electron  Som en terminal der programkoden kjører på serveren  Via SignalR
  • 20. Server-side Blazor  Egen type prosjekt  Bruker SignalR  Akurat samme struktur og modell som “vanlig” Blazor
  • 21. Kode! Veldig kort gjennomgang av server-side Blazor
  • 22. ... også kom Blazor 0.6 på Tirsdag!  Komponenter med maler  F.eks. ListView med en mal for hvert list item  RazorTemplates – små gjenbrukbare razor-snutter  Støtte for Azure SignalR Service  Denne vil hete Razor Components og blir en del av .Net Core 3.0!
  • 23. Til slutt noen nyttige ressurser  https://blazor.net/  Her finner du stort sett alt  http://learn-blazor.com/  Alternativ ressurs for Blazor  https://blogs.msdn.microsoft.com/webdev/category/blazor/  Microsofts Blazor-blogg  https://github.com/aspnet/Blazor  Koden  https://www.youtube.com/watch?v=MiLAE6HMr10  Den første demoen av Blazor, på NDC 2017