SlideShare a Scribd company logo
1 of 42
Download to read offline
Maximilian Berghoff
@ElectricMaxxx
github.com/electricmaxxx
Maximilian.Berghoff@mayflower.de
Mayflower GmbH - Würzburg
AUSBLICKAUSBLICK
Basics: Templata ng, Komponenten
Services
Advanced: Forms vs. Reac ve Forms
HISTORYHISTORY
Angular 1.x heißt jetzt AngularJS
Angular 2 und 4 sind Angular
Entwickelt in Community, der auch Google
angehört
ANGULARJS VS. ANGULARANGULARJS VS. ANGULAR
ANGULAR JSANGULAR JS
Controller als Standard für ein "MVC"
Komponenten durch Direk ven
möglich
Data-Binding everywhere
ANGULARANGULAR
Fokus auf Komponenten
Data-Binding kann/muss in der Verantwortung des
Entwicklers
Modul Struktur
Typescript als Basis
fak sch keine Migra on von AngularJS auf Angular möglich (außer
Rewrite)
Angular 2 lässt sich einfach auf 6 migrieren
AUSBLICK - THEMENAUSBLICK - THEMEN
Bootstraping - Installa on einer Skeleton App mit dem
CLI
Basics:
Templa ng, Komponenten, App-Struktur, DI
Advanced:
Forms - Data-Binding oder Reac ve
Events - Inter-Komponenten-Kommunika on
Async - Kommunika on mit einem Server
LOS GEHT'SLOS GEHT'S
TASK 1: BOOTSTRAPINGTASK 1: BOOTSTRAPING
# install CLI
npm install -g @angular/cli
# Create new skeleton app
ng new example-app
cd example-app
# run it
ng serve -o
BASICS - STRUKTURBASICS - STRUKTUR
BASIS - TEMPLATINGBASIS - TEMPLATING
TEMPLATING - INTERPOLATIONTEMPLATING - INTERPOLATION
{{ 'ich bin ein string'}}
<!-- String -->
{{ ichBinEineVariable}}
<!-- public property in component -->
{{ 'ich bin ein string' + ichBinEineVariable}}
<!-- Concatenation -->
{{ gibString() }}
<!-- Method Call -->
export class AppComponent {
ichBinEineVariable = 'app';
gibString(): string {
return 'Ich bin ein String';
}
}
TEMPLATING - EXPRESSIONSTEMPLATING - EXPRESSIONS
[property]="expression"
TEMPLATING - EXPRESSIONSTEMPLATING - EXPRESSIONS
<span [hidden]="isUnchanged">changed</span>
<!-- Sichtbarkeit von Span Element -->
<div *ngFor="let task of tasks">{{task.name}}</div>
<!-- Angular interne Direktive -->
export class AppComponent {
isUnchanged: bool = true;
tasks: Task[] = [];
}
TEMPLATING - STATEMENTSTEMPLATING - STATEMENTS
<button (click)="onClick()">Drück mich</button>
<!-- Event Handler -->
export class AppComponent {
onClick(): void {
alert('ich wurde gedrückt');
}
}
TEMPLATES - DATA BINDINGTEMPLATES - DATA BINDING
Data direc on Syntax Type
One-Way from data source to view template {{expression}},[target]="expression" Interpola on, Property, A ribute, Class, Style
One-way from view target to data source (target)="statement" Event
Two-Way [(target)]="expression" Two-Way
BASICS - TESTINGBASICS - TESTING
BASICS - DEPENDENCY INJECTIONBASICS - DEPENDENCY INJECTION
DEPENDENCY INJECTIONDEPENDENCY INJECTION
import { Injectable } from '@angular/core';
import { HEROES } from './mock-heroes';
@Injectable()
export class HeroService {
getHeroes() { return HEROES; }
}
DEPENDENCY INJECTIONDEPENDENCY INJECTION
import { Injectable } from '@angular/core';
import { HEROES } from './mock-heroes';
const heroesPromise = Promise.resolve(HEROES);
@Injectable()
export class HeroService {
getHeroes(): Promise<Hero[]> { return heroesPromise; }
}
DEPENDENCY INJECTIONDEPENDENCY INJECTION
import { Component } from '@angular/core';
import { HeroService } from './hero.service';
@Component({
selector: 'my-heroes',
providers: [HeroService],
template: `
<h2>Heroes</h2>
<hero-list></hero-list>
`
})
export class HeroesComponent {
constructor (private service: HeroService) {}
}
ADVANCEDADVANCED
ADVANCED - EVENTSADVANCED - EVENTS
EVENTS - INNER COMPONENTEVENTS - INNER COMPONENT
import {Component, EventEmitter, Input, Output} from "@angular/core";
@Component({
selector: 'inner-component',
template: '<h1>{{title}}</h1>'
})
export class InnerComponent {
@Input() title: string = '';
}
EVENTS -- INNER COMPONENT - SUBMIT EVENTEVENTS -- INNER COMPONENT - SUBMIT EVENT
import {Component, EventEmitter, Input, Output} from "@angular/core";
@Component({
selector: 'inner-component',
template: `
<h1>{{title}}</h1>
<p><button (click)="onClick()">Klick mich</button></p>
`
})
export class InnerComponent {
@Input() title: string = '';
@Output() onClick: EventEmitter<void> = new EventEmitter();
onClick() {
this.onClick.emit();
}
}
EVENTS - OUTER COMPONENTEVENTS - OUTER COMPONENT
import {Component} from "@angular/core";
@Component({
selector: 'outer-component',
template: '<inner-component [title]="title"></inner-component>'
})
export class OuterComponent {
title: string = 'Title';
onInnerClick(): void {
alert('Innen wurde gedrückt');
}
}
EVENTS - OUTER COMPONENT - CATCHINGEVENTS - OUTER COMPONENT - CATCHING
import {Component} from "@angular/core";
@Component({
selector: 'app',
template: `
<outer-component (onClick)="onInnerClick()">
</outer-component>`
})
export class AppComponent {
}
ADVANCED - FORMSADVANCED - FORMS
FORMSFORMS
import {Component} from "@angular/core";
@Component({
selector: 'app',
template: `
<form>
<input
type="text"
[(ngModel)]="name"
name="name"
id="name" />
</form>
`
})
export class AppComponent {
name: string = 'Max';
}
FORMS - REACTIVE FORMSFORMS - REACTIVE FORMS
FORMS - REACTIVE FORMSFORMS - REACTIVE FORMS
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { ReactiveFormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
@NgModule({
imports: [
BrowserModule,
ReactiveFormsModule
],
declarations: [
AppComponent
],
bootstrap: [ AppComponent ]
})
export class AppModule { }
FORMS - REACTIVE FORMS - TEMPLATEFORMS - REACTIVE FORMS - TEMPLATE
<h2>Hero Detail</h2>
<h3><i>FormControl in a FormGroup</i></h3>
<form [formGroup]="heroForm" novalidate>
<div class="form-group">
<label class="center-block">Name:
<input class="form-control" formControlName="name">
</label>
</div>
</form>
FORMS - REACTIVE FORMS - COMPONENTFORMS - REACTIVE FORMS - COMPONENT
import { Component } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms';
@Component({
selector: 'hero-detail',
templateUrl: 'hero-detail.html'
})
export class HeroDetailComponent {
heroForm: FormGroup;
constructor(private fb: FormBuilder) { this.createForm()}
createForm() {
this.heroForm = this.fb.group({name: ''});
}
}
FORMS - REACTIVE FORMSFORMS - REACTIVE FORMS
<p>Form value: {{ heroForm.value | json }}</p>
<p>Form status: {{ heroForm.status | json }}</p>
DIE APP - CFP FOR CODETALKS SPEAKERSDIE APP - CFP FOR CODETALKS SPEAKERS
1
2
3
4
As a Speaker i would like to enter my speaker data once, to propose my talk abstracts.
As a Speaker i would like enter my talk related data to get a speaker slot at codetalks
As a organizer of codetalks i would like to see all proposed talks in a list.
As a curator of a codetalks tracks i would like to vote on an abstract, to get it into my track or
not
CLONE REPOSITORYCLONE REPOSITORY
OROR
# repository and angular cli
$ git clone git@gitlab.com:ElectricMaxxx/code-talks-angular-hack.git
$ cd code-talks-anagular-hack
## use local node stack
$ npm install
$ npm install @angular/cli
$ ng serve -o
## OR use docker-compose
$ docker-compose up -d
# container usage
$ mkdir app
$ docker run -p 4201:4200 -d -v /absolute/path/to/app/:/usr/src/app/ registry.gitlab.com/electricmaxxx/code-talks-angular-hack:latest
QUESTIONSQUESTIONS
Ask Now!
Twi er: @ElectricMaxxx
Mail:
Maximilian.Berghoff@mayflower.de
THANK YOU!THANK YOU!

More Related Content

What's hot

AngularJS Introduction (Talk given on Aug 5 2013)
AngularJS Introduction (Talk given on Aug 5 2013)AngularJS Introduction (Talk given on Aug 5 2013)
AngularJS Introduction (Talk given on Aug 5 2013)
Abhishek Anand
 

What's hot (20)

Restful Web Service
Restful Web ServiceRestful Web Service
Restful Web Service
 
Angular from Scratch
Angular from ScratchAngular from Scratch
Angular from Scratch
 
AngularJs presentation
AngularJs presentation AngularJs presentation
AngularJs presentation
 
Beyond AngularJS: Best practices and more
Beyond AngularJS: Best practices and moreBeyond AngularJS: Best practices and more
Beyond AngularJS: Best practices and more
 
jsf2 Notes
jsf2 Notesjsf2 Notes
jsf2 Notes
 
Angular 2 binding
Angular 2  bindingAngular 2  binding
Angular 2 binding
 
introduction to Angularjs basics
introduction to Angularjs basicsintroduction to Angularjs basics
introduction to Angularjs basics
 
Securing JSF Applications Against the OWASP Top Ten
Securing JSF Applications Against the OWASP Top TenSecuring JSF Applications Against the OWASP Top Ten
Securing JSF Applications Against the OWASP Top Ten
 
Building maintainable app
Building maintainable appBuilding maintainable app
Building maintainable app
 
Angular 2.0 Routing and Navigation
Angular 2.0 Routing and NavigationAngular 2.0 Routing and Navigation
Angular 2.0 Routing and Navigation
 
Introduction to Unit Tests and TDD
Introduction to Unit Tests and TDDIntroduction to Unit Tests and TDD
Introduction to Unit Tests and TDD
 
Building maintainable app #droidconzg
Building maintainable app #droidconzgBuilding maintainable app #droidconzg
Building maintainable app #droidconzg
 
Angular 2.0 Dependency injection
Angular 2.0 Dependency injectionAngular 2.0 Dependency injection
Angular 2.0 Dependency injection
 
Net conf BG xamarin lecture
Net conf BG xamarin lectureNet conf BG xamarin lecture
Net conf BG xamarin lecture
 
Meetup angular http client
Meetup angular http clientMeetup angular http client
Meetup angular http client
 
AngularJS - dependency injection
AngularJS - dependency injectionAngularJS - dependency injection
AngularJS - dependency injection
 
Angular App Presentation
Angular App PresentationAngular App Presentation
Angular App Presentation
 
AngularJS Introduction (Talk given on Aug 5 2013)
AngularJS Introduction (Talk given on Aug 5 2013)AngularJS Introduction (Talk given on Aug 5 2013)
AngularJS Introduction (Talk given on Aug 5 2013)
 
Jsf intro
Jsf introJsf intro
Jsf intro
 
Angular js-crash-course
Angular js-crash-courseAngular js-crash-course
Angular js-crash-course
 

Similar to Angular Mini Hackathon Code Talks 2019

Similar to Angular Mini Hackathon Code Talks 2019 (20)

Angular Workshop FrOSCon 2018
Angular Workshop  FrOSCon 2018Angular Workshop  FrOSCon 2018
Angular Workshop FrOSCon 2018
 
Bootiful Development with Spring Boot and Angular - Spring I/O 2017
Bootiful Development with Spring Boot and Angular - Spring I/O 2017Bootiful Development with Spring Boot and Angular - Spring I/O 2017
Bootiful Development with Spring Boot and Angular - Spring I/O 2017
 
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
 
Angular 2 in-1
Angular 2 in-1 Angular 2 in-1
Angular 2 in-1
 
Angular1x and Angular 2 for Beginners
Angular1x and Angular 2 for BeginnersAngular1x and Angular 2 for Beginners
Angular1x and Angular 2 for Beginners
 
Angular Js Get Started - Complete Course
Angular Js Get Started - Complete CourseAngular Js Get Started - Complete Course
Angular Js Get Started - Complete Course
 
CFUGbe talk about Angular JS
CFUGbe talk about Angular JSCFUGbe talk about Angular JS
CFUGbe talk about Angular JS
 
Angular 2 - The Next Framework
Angular 2 - The Next FrameworkAngular 2 - The Next Framework
Angular 2 - The Next Framework
 
AngularJs Crash Course
AngularJs Crash CourseAngularJs Crash Course
AngularJs Crash Course
 
mean stack
mean stackmean stack
mean stack
 
Angular data binding by Soft Solutions4U
Angular data binding by Soft Solutions4UAngular data binding by Soft Solutions4U
Angular data binding by Soft Solutions4U
 
Flutter vs React: взгляд нативщика / Александр Смирнов (Splyt)
Flutter vs React: взгляд нативщика / Александр Смирнов (Splyt)Flutter vs React: взгляд нативщика / Александр Смирнов (Splyt)
Flutter vs React: взгляд нативщика / Александр Смирнов (Splyt)
 
JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"
 
Leveling up with AngularJS
Leveling up with AngularJSLeveling up with AngularJS
Leveling up with AngularJS
 
AngularJS.part1
AngularJS.part1AngularJS.part1
AngularJS.part1
 
Predictable Web Apps with Angular and Redux
Predictable Web Apps with Angular and ReduxPredictable Web Apps with Angular and Redux
Predictable Web Apps with Angular and Redux
 
Angular 4 for Java Developers
Angular 4 for Java DevelopersAngular 4 for Java Developers
Angular 4 for Java Developers
 
Angular 2 Migration - JHipster Meetup 6
Angular 2 Migration - JHipster Meetup 6Angular 2 Migration - JHipster Meetup 6
Angular 2 Migration - JHipster Meetup 6
 
Modular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJSModular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJS
 
angular fundamentals.pdf angular fundamentals.pdf
angular fundamentals.pdf angular fundamentals.pdfangular fundamentals.pdf angular fundamentals.pdf
angular fundamentals.pdf angular fundamentals.pdf
 

More from Maximilian Berghoff

RESTing on HTTP - FrOSCon 10 - 2015-08-23
RESTing on HTTP - FrOSCon 10 - 2015-08-23RESTing on HTTP - FrOSCon 10 - 2015-08-23
RESTing on HTTP - FrOSCon 10 - 2015-08-23
Maximilian Berghoff
 

More from Maximilian Berghoff (20)

Sustainability in der deploy pipeline
Sustainability in der deploy pipelineSustainability in der deploy pipeline
Sustainability in der deploy pipeline
 
Development is for future
Development is for futureDevelopment is for future
Development is for future
 
Development is for future
Development is for futureDevelopment is for future
Development is for future
 
Natural language understanding meets php php ruhr 2018
Natural language understanding meets php   php ruhr 2018Natural language understanding meets php   php ruhr 2018
Natural language understanding meets php php ruhr 2018
 
NLU meets PHP
NLU meets PHPNLU meets PHP
NLU meets PHP
 
Search engine optimization for symfony developers
Search engine optimization for symfony developersSearch engine optimization for symfony developers
Search engine optimization for symfony developers
 
Introduction into FrOSCon PHP Track
Introduction into FrOSCon PHP TrackIntroduction into FrOSCon PHP Track
Introduction into FrOSCon PHP Track
 
API Plattform - A Backend in Minutes
API Plattform - A Backend in MinutesAPI Plattform - A Backend in Minutes
API Plattform - A Backend in Minutes
 
The content manager loves the tree
The content manager loves the treeThe content manager loves the tree
The content manager loves the tree
 
Aspects Of Code Quality meetup
Aspects Of Code Quality   meetupAspects Of Code Quality   meetup
Aspects Of Code Quality meetup
 
Reactive Javascript - FrOSCon - 2016
Reactive Javascript - FrOSCon - 2016Reactive Javascript - FrOSCon - 2016
Reactive Javascript - FrOSCon - 2016
 
Extending a symfony application by cms features
Extending a symfony application by cms featuresExtending a symfony application by cms features
Extending a symfony application by cms features
 
Concepts of Code Quality
Concepts of Code QualityConcepts of Code Quality
Concepts of Code Quality
 
Mit dem API ins CMS
Mit dem API ins CMSMit dem API ins CMS
Mit dem API ins CMS
 
Reactive java script mit rxjs basta! 2016
Reactive java script mit rxjs   basta! 2016Reactive java script mit rxjs   basta! 2016
Reactive java script mit rxjs basta! 2016
 
Eine Symfony Application um CMS-Funktionen erweitern
Eine Symfony Application um CMS-Funktionen erweiternEine Symfony Application um CMS-Funktionen erweitern
Eine Symfony Application um CMS-Funktionen erweitern
 
RESTing on HTTP - FrOSCon 10 - 2015-08-23
RESTing on HTTP - FrOSCon 10 - 2015-08-23RESTing on HTTP - FrOSCon 10 - 2015-08-23
RESTing on HTTP - FrOSCon 10 - 2015-08-23
 
RESTing on HTTP
RESTing on HTTPRESTing on HTTP
RESTing on HTTP
 
Symfony-CMF/SeoBundle - unKonf
Symfony-CMF/SeoBundle - unKonfSymfony-CMF/SeoBundle - unKonf
Symfony-CMF/SeoBundle - unKonf
 
Rest
RestRest
Rest
 

Recently uploaded

一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
ayvbos
 
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
ydyuyu
 
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
ydyuyu
 
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
ayvbos
 
Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...
Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...
Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...
gajnagarg
 
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi EscortsIndian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Monica Sydney
 
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdfpdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
JOHNBEBONYAP1
 
一比一原版(Offer)康考迪亚大学毕业证学位证靠谱定制
一比一原版(Offer)康考迪亚大学毕业证学位证靠谱定制一比一原版(Offer)康考迪亚大学毕业证学位证靠谱定制
一比一原版(Offer)康考迪亚大学毕业证学位证靠谱定制
pxcywzqs
 
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
ydyuyu
 
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi EscortsRussian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Monica Sydney
 
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girlsRussian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Monica Sydney
 

Recently uploaded (20)

一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
 
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
 
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency""Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
 
Meaning of On page SEO & its process in detail.
Meaning of On page SEO & its process in detail.Meaning of On page SEO & its process in detail.
Meaning of On page SEO & its process in detail.
 
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
 
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrStory Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
 
Power point inglese - educazione civica di Nuria Iuzzolino
Power point inglese - educazione civica di Nuria IuzzolinoPower point inglese - educazione civica di Nuria Iuzzolino
Power point inglese - educazione civica di Nuria Iuzzolino
 
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
 
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
 
Microsoft Azure Arc Customer Deck Microsoft
Microsoft Azure Arc Customer Deck MicrosoftMicrosoft Azure Arc Customer Deck Microsoft
Microsoft Azure Arc Customer Deck Microsoft
 
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
一比一原版(Curtin毕业证书)科廷大学毕业证原件一模一样
 
Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...
Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...
Top profile Call Girls In Dindigul [ 7014168258 ] Call Me For Genuine Models ...
 
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi EscortsIndian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
 
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdfpdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
 
Best SEO Services Company in Dallas | Best SEO Agency Dallas
Best SEO Services Company in Dallas | Best SEO Agency DallasBest SEO Services Company in Dallas | Best SEO Agency Dallas
Best SEO Services Company in Dallas | Best SEO Agency Dallas
 
Nagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime Nagercoil
Nagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime NagercoilNagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime Nagercoil
Nagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime Nagercoil
 
一比一原版(Offer)康考迪亚大学毕业证学位证靠谱定制
一比一原版(Offer)康考迪亚大学毕业证学位证靠谱定制一比一原版(Offer)康考迪亚大学毕业证学位证靠谱定制
一比一原版(Offer)康考迪亚大学毕业证学位证靠谱定制
 
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
 
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi EscortsRussian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
 
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girlsRussian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
Russian Call girls in Abu Dhabi 0508644382 Abu Dhabi Call girls
 

Angular Mini Hackathon Code Talks 2019

  • 1.
  • 3. AUSBLICKAUSBLICK Basics: Templata ng, Komponenten Services Advanced: Forms vs. Reac ve Forms
  • 5. Angular 1.x heißt jetzt AngularJS Angular 2 und 4 sind Angular Entwickelt in Community, der auch Google angehört
  • 7. ANGULAR JSANGULAR JS Controller als Standard für ein "MVC" Komponenten durch Direk ven möglich Data-Binding everywhere
  • 8. ANGULARANGULAR Fokus auf Komponenten Data-Binding kann/muss in der Verantwortung des Entwicklers Modul Struktur Typescript als Basis
  • 9. fak sch keine Migra on von AngularJS auf Angular möglich (außer Rewrite) Angular 2 lässt sich einfach auf 6 migrieren
  • 11. Bootstraping - Installa on einer Skeleton App mit dem CLI Basics: Templa ng, Komponenten, App-Struktur, DI Advanced: Forms - Data-Binding oder Reac ve Events - Inter-Komponenten-Kommunika on Async - Kommunika on mit einem Server
  • 13. TASK 1: BOOTSTRAPINGTASK 1: BOOTSTRAPING # install CLI npm install -g @angular/cli # Create new skeleton app ng new example-app cd example-app # run it ng serve -o
  • 15. BASIS - TEMPLATINGBASIS - TEMPLATING
  • 16. TEMPLATING - INTERPOLATIONTEMPLATING - INTERPOLATION {{ 'ich bin ein string'}} <!-- String --> {{ ichBinEineVariable}} <!-- public property in component --> {{ 'ich bin ein string' + ichBinEineVariable}} <!-- Concatenation --> {{ gibString() }} <!-- Method Call --> export class AppComponent { ichBinEineVariable = 'app'; gibString(): string { return 'Ich bin ein String'; } }
  • 17. TEMPLATING - EXPRESSIONSTEMPLATING - EXPRESSIONS [property]="expression"
  • 18. TEMPLATING - EXPRESSIONSTEMPLATING - EXPRESSIONS <span [hidden]="isUnchanged">changed</span> <!-- Sichtbarkeit von Span Element --> <div *ngFor="let task of tasks">{{task.name}}</div> <!-- Angular interne Direktive --> export class AppComponent { isUnchanged: bool = true; tasks: Task[] = []; }
  • 19. TEMPLATING - STATEMENTSTEMPLATING - STATEMENTS <button (click)="onClick()">Drück mich</button> <!-- Event Handler --> export class AppComponent { onClick(): void { alert('ich wurde gedrückt'); } }
  • 20. TEMPLATES - DATA BINDINGTEMPLATES - DATA BINDING Data direc on Syntax Type One-Way from data source to view template {{expression}},[target]="expression" Interpola on, Property, A ribute, Class, Style One-way from view target to data source (target)="statement" Event Two-Way [(target)]="expression" Two-Way
  • 22. BASICS - DEPENDENCY INJECTIONBASICS - DEPENDENCY INJECTION
  • 23. DEPENDENCY INJECTIONDEPENDENCY INJECTION import { Injectable } from '@angular/core'; import { HEROES } from './mock-heroes'; @Injectable() export class HeroService { getHeroes() { return HEROES; } }
  • 24. DEPENDENCY INJECTIONDEPENDENCY INJECTION import { Injectable } from '@angular/core'; import { HEROES } from './mock-heroes'; const heroesPromise = Promise.resolve(HEROES); @Injectable() export class HeroService { getHeroes(): Promise<Hero[]> { return heroesPromise; } }
  • 25. DEPENDENCY INJECTIONDEPENDENCY INJECTION import { Component } from '@angular/core'; import { HeroService } from './hero.service'; @Component({ selector: 'my-heroes', providers: [HeroService], template: ` <h2>Heroes</h2> <hero-list></hero-list> ` }) export class HeroesComponent { constructor (private service: HeroService) {} }
  • 28. EVENTS - INNER COMPONENTEVENTS - INNER COMPONENT import {Component, EventEmitter, Input, Output} from "@angular/core"; @Component({ selector: 'inner-component', template: '<h1>{{title}}</h1>' }) export class InnerComponent { @Input() title: string = ''; }
  • 29. EVENTS -- INNER COMPONENT - SUBMIT EVENTEVENTS -- INNER COMPONENT - SUBMIT EVENT import {Component, EventEmitter, Input, Output} from "@angular/core"; @Component({ selector: 'inner-component', template: ` <h1>{{title}}</h1> <p><button (click)="onClick()">Klick mich</button></p> ` }) export class InnerComponent { @Input() title: string = ''; @Output() onClick: EventEmitter<void> = new EventEmitter(); onClick() { this.onClick.emit(); } }
  • 30. EVENTS - OUTER COMPONENTEVENTS - OUTER COMPONENT import {Component} from "@angular/core"; @Component({ selector: 'outer-component', template: '<inner-component [title]="title"></inner-component>' }) export class OuterComponent { title: string = 'Title'; onInnerClick(): void { alert('Innen wurde gedrückt'); } }
  • 31. EVENTS - OUTER COMPONENT - CATCHINGEVENTS - OUTER COMPONENT - CATCHING import {Component} from "@angular/core"; @Component({ selector: 'app', template: ` <outer-component (onClick)="onInnerClick()"> </outer-component>` }) export class AppComponent { }
  • 33. FORMSFORMS import {Component} from "@angular/core"; @Component({ selector: 'app', template: ` <form> <input type="text" [(ngModel)]="name" name="name" id="name" /> </form> ` }) export class AppComponent { name: string = 'Max'; }
  • 34. FORMS - REACTIVE FORMSFORMS - REACTIVE FORMS
  • 35. FORMS - REACTIVE FORMSFORMS - REACTIVE FORMS import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { ReactiveFormsModule } from '@angular/forms'; import { AppComponent } from './app.component'; @NgModule({ imports: [ BrowserModule, ReactiveFormsModule ], declarations: [ AppComponent ], bootstrap: [ AppComponent ] }) export class AppModule { }
  • 36. FORMS - REACTIVE FORMS - TEMPLATEFORMS - REACTIVE FORMS - TEMPLATE <h2>Hero Detail</h2> <h3><i>FormControl in a FormGroup</i></h3> <form [formGroup]="heroForm" novalidate> <div class="form-group"> <label class="center-block">Name: <input class="form-control" formControlName="name"> </label> </div> </form>
  • 37. FORMS - REACTIVE FORMS - COMPONENTFORMS - REACTIVE FORMS - COMPONENT import { Component } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; @Component({ selector: 'hero-detail', templateUrl: 'hero-detail.html' }) export class HeroDetailComponent { heroForm: FormGroup; constructor(private fb: FormBuilder) { this.createForm()} createForm() { this.heroForm = this.fb.group({name: ''}); } }
  • 38. FORMS - REACTIVE FORMSFORMS - REACTIVE FORMS <p>Form value: {{ heroForm.value | json }}</p> <p>Form status: {{ heroForm.status | json }}</p>
  • 39. DIE APP - CFP FOR CODETALKS SPEAKERSDIE APP - CFP FOR CODETALKS SPEAKERS 1 2 3 4 As a Speaker i would like to enter my speaker data once, to propose my talk abstracts. As a Speaker i would like enter my talk related data to get a speaker slot at codetalks As a organizer of codetalks i would like to see all proposed talks in a list. As a curator of a codetalks tracks i would like to vote on an abstract, to get it into my track or not
  • 40. CLONE REPOSITORYCLONE REPOSITORY OROR # repository and angular cli $ git clone git@gitlab.com:ElectricMaxxx/code-talks-angular-hack.git $ cd code-talks-anagular-hack ## use local node stack $ npm install $ npm install @angular/cli $ ng serve -o ## OR use docker-compose $ docker-compose up -d # container usage $ mkdir app $ docker run -p 4201:4200 -d -v /absolute/path/to/app/:/usr/src/app/ registry.gitlab.com/electricmaxxx/code-talks-angular-hack:latest
  • 41. QUESTIONSQUESTIONS Ask Now! Twi er: @ElectricMaxxx Mail: Maximilian.Berghoff@mayflower.de