Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Angular 2.0 - What to Expect?
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Allan Marques Baptista
January 15, 2015
Programming
0
240
Angular 2.0 - What to Expect?
A talk from a GDG meeting at Rio de Janeiro, Brazil.
Allan Marques Baptista
January 15, 2015
Tweet
Share
More Decks by Allan Marques Baptista
See All by Allan Marques Baptista
Hybrid Apps - From web to mobile without pain
m4n3z40
0
52
Other Decks in Programming
See All in Programming
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
210
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1.2k
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
620
CSC307 Lecture 07
javiergs
PRO
0
550
Oxlint JS plugins
kazupon
1
970
SourceGeneratorのススメ
htkym
0
200
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
190
高速開発のためのコード整理術
sutetotanuki
1
400
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
200
AI巻き込み型コードレビューのススメ
nealle
2
370
dchart: charts from deck markup
ajstarks
3
990
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
130
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
110
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
52k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
54
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
910
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
450
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
190
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.1k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Transcript
Angular 2.0 What to expect?
Who is Allan Baptista?
Mobile Developer Hotel Urbano Participated on the latest desktop’s home
re-design Currently working on the 2.0 App for WP. M. Site’s Creator //WhoisAllanBaptista?
//WhoisAllanBaptista? Mobile Developer Hotel Urbano PHP HTML CSS JS Python
Ruby NodeJS Mobile Platforms
Who is Allan Baptista? Why 2.0?
ANGULAR //Why2.0 THEWEBIS AT A RIDICULOUS changing PACE HASGOTTOKEEPUP ES6
ES7
WTF is atScript?
//WTFisatScript? ES6 Type annotations Field annotations Metadata annotations Type introspection
+ + + +
import {Component} from 'angular'; import {Server} from './server'; @Component({selector: 'foo'})
export class MyComponent { constructor(server:Server) { this.server = server; } } import * as rtts from 'rtts'; import {Component} from 'angular'; import {Server} from './server'; export class MyComponent { constructor(server) { rtts.types(server, Server); this.server = server; } } MyComponent.parameters = [{is:Server}]; MyComponent.annotate = [ new Component({selector: 'foo'}) ]; ATSCRIPT AFTERCOMPILED //WTFisatScript?
Dependency Injection
scope management (all instances are singleton) someModule.controller('MyController', function($scope, greeter) {
// ... }); // or... angular.module('myModule', []) .factory('serviceId', ['depService', function(depService) { // ... }]) .directive('directiveName', ['depService', function(depService) { // ... }]) .filter('filterName', ['depService', function(depService) { // ... }]); // or... var MyController = function($scope, greeter) { // ... } MyController.$inject = ['$scope', 'greeter']; someModule.controller('MyController', MyController); //DependencyInjection PRESENT KNOWNPROBLEM
Enables a unique instance for every injection Providers, Lazy Injection,
Async Injections import {Component} from 'angular'; import {Server} from './server'; @Component({selector: 'foo'}) export class MyComponent { constructor(server:Server) { this.server = server; } } @TransientScope export class MyClass { ... } //DependencyInjection FUTURE ANDMORE
Components & Databinding
The Directive Definition Object (DDO) is awfully confusing and hard
to learn. angular.module('docsTabsExample', []) .directive('myPane', function() { return { require: ['^myTabs', '^ngModel'], restrict: 'E', transclude: true, scope: { title: '@' }, link: function(scope, element, attrs, controllers) { var tabsCtrl = controllers[0], modelCtrl = controllers[1]; tabsCtrl.addPane(scope); }, templateUrl: 'my-pane.html' }; }); <my-pane></my-pane> //Components&Databinding PRESENT KNOWNPROBLEM
//Components&Databinding FUTURE @ComponentDirective Creates a custom component composed of a
view and a controller. @DecoratorDirective Decorates an existing HTML element with additional behavior. @TemplateDirective Transforms HTML into a reusable template.
@ComponentDirective({ selector:'tab-container', directives:[NgRepeat] }) export class TabContainer { constructor(panes:Query<Pane>) {
this.panes = panes; } select(selectedPane:Pane) { //... } } <template> <div class="border"> <div class="tabs"> <div [ng-repeat|pane]="panes" class="tab" (^click)="select(pane)"> <img [src]=“pane.icon"> <span>${pane.name}</span> </div> </div> <content></content> </div> </template> //Components&Databinding @ComponentDirective
@DecoratorDirective({ selector:'[ng-show]', bind: { 'ngShow': 'ngShow' }, observe: {'ngShow': 'ngShowChanged'}
}) export class NgShow { constructor(element:Element) { this.element = element; } ngShowChanged(newValue){ if(newValue){ this.element.style.display = 'block'; }else{ this.element.style.display = 'none'; } } } //Components&Databinding @DecoratorDirective
@TemplateDirective({ selector: '[ng-if]', bind: {'ngIf': 'ngIf'}, observe: {'ngIf': 'ngIfChanged'} })
export class NgIf { constructor(viewFactory:BoundViewFactory, viewPort:ViewPort) { this.viewFactory = viewFactory; this.viewPort = viewPort; this.view = null; } ngIfChanged(value) { if (!value && this.view) { this.view.remove(); this.view = null; } if (value) { this.view = this.viewFactory.createView(); this.view.appendTo(this.viewPort); } } } //Components&Databinding @TemplateDirective
The Router
No flexibility. phonecatApp.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/phones', { templateUrl: 'partials/phone-list.html',
controller: 'PhoneListCtrl' }). when('/phones/:phoneId', { templateUrl: 'partials/phone-detail.html', controller: 'PhoneDetailCtrl' }). otherwise({ redirectTo: '/phones' }); }]); //TheRouter PRESENT KNOWNPROBLEM
? • Configuration/Conventions • 404 Handling • History Manipulation •
Navigation Model • Document Title Updates • hashChange/pushState • Dynamic Loading • Child Apps • Screen Activation ◦TO: canActivate => activate ◦FROM: canDeactivate => deactivate //TheRouter PRESENT IMPLEMENTEDFEATURES
What about structure, scaffolding, build, testing, best practices?
Nothing yet :(
Who is Allan Baptista? Contacts
//Contacts @m4n3z40 @NeverFunnyGuy fb.me/allan.baptista linkedin.com/in/allanbaptista
[email protected]
Who is Allan Baptista? Sources
• http://eisenbergeffect.bluespire.com/all-about-angular-2-0/ • https://docs.google.com/document/d/ 1kpuR512G1b0D8egl9245OHaG0cFh0ST0ekhD_g8sxtI/edit?usp=sharing • https://github.com/angular/angular/issues/133 • https://www.youtube.com/watch?v=h1P_Vh4gSQY •
https://www.youtube.com/watch? v=gNmWybAyBHI&list=UUEGUP3TJJfMsEM_1y8iviSQ • https://www.youtube.com/watch?v=g- x1QKriY90&list=UUEGUP3TJJfMsEM_1y8iviSQ //Sources