building angular apps using directives as components

38
Web Components in

Upload: craig-simpson

Post on 17-Jan-2017

557 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Building Angular Apps using Directives as Components

Web Components in

Page 2: Building Angular Apps using Directives as Components

Craig Simpson

@[email protected]

PureCars

Page 3: Building Angular Apps using Directives as Components

WEB COMPONENTS

Page 4: Building Angular Apps using Directives as Components

MODULAR + CLEANER + SINGLE FOCUSED + REUSABLE

ITERATE FASTER

=

Page 5: Building Angular Apps using Directives as Components

The Future of Web Development

Custom Elements

Templates

HTML Imports

Shadow DOM

Page 6: Building Angular Apps using Directives as Components

<todo-app> <search onUpdate="searchTodos( query )"></search><add-todo onComplete="addTodo( todo )"></add-todo><todo-list items="todos" onSelect="go( todo)"></todo-list>

</todo-app>

Page 7: Building Angular Apps using Directives as Components
Page 8: Building Angular Apps using Directives as Components

DIRECTIVES

How Do You Make Web Components In Angular?

Page 9: Building Angular Apps using Directives as Components

Simple vs. Easy

Page 10: Building Angular Apps using Directives as Components

Rick Henly, 2012 RailsConf Keynote: Simplicity Matters

Page 11: Building Angular Apps using Directives as Components

Controllers are EASY

Directives are SIMPLE

Page 12: Building Angular Apps using Directives as Components
Page 13: Building Angular Apps using Directives as Components
Page 14: Building Angular Apps using Directives as Components

Controllers: ng-controller

• Out of Control Inheritance• Tightly Coupled• Globalish• Duplicate DOM

Page 15: Building Angular Apps using Directives as Components

$scope is JS’s Prototype Chain

Page 16: Building Angular Apps using Directives as Components
Page 17: Building Angular Apps using Directives as Components
Page 18: Building Angular Apps using Directives as Components

Controllers: ng-controller

Page 19: Building Angular Apps using Directives as Components

Effective Directive

1. Isolated Scope

2. HTML Template

3. A Controller

Page 20: Building Angular Apps using Directives as Components

<todo-app> <search onUpdate="searchTodos( query )"></search><add-todo onComplete="addTodo( todo )"></add-todo><todo-list items="todos" on-select="go( todo )"></todo-list>

</todo-app>

Page 21: Building Angular Apps using Directives as Components

<todo-list items="todos" on-select="go( item )"></todo-list>

Page 22: Building Angular Apps using Directives as Components

angular.module('app').directive('todoList', function(){ return { restrict: 'E', scope: { items: '=', onSelect: '&' }, template: 'todoList.html', controller: 'TodoListCtrl', controllerAs: 'todoList' };}).controller('TodoListCtrl', function($scope){ this.onItemClick = function( item ){ $scope.onSelect( { item: item } ); };});

Page 23: Building Angular Apps using Directives as Components

angular.module('app').directive('todoList', function(){ return { restrict: 'E', scope: { items: '=', onSelect: '&' }, template: 'todoList.html', controller: 'TodoListCtrl', controllerAs: 'todoList' };}).controller('TodoListCtrl', function($scope){ this.onItemClick = function( item ){ $scope.onSelect( { item: item } ); };});

Page 24: Building Angular Apps using Directives as Components

<ul> <li ng-repeat="item in items” values="item" ng-click="todoList.onItemClick( item )"> {{item.name}} </li></ul>

todoList.html

Page 25: Building Angular Apps using Directives as Components

<todo-list items="todos" on-select="go( item )"></todo-list>

Page 26: Building Angular Apps using Directives as Components

Folder Structuring!

Page 27: Building Angular Apps using Directives as Components

Cons• Hard to Write• More Code• Everything Can’t Be Components• Few Benefits for Small Apps

Page 28: Building Angular Apps using Directives as Components

• One Purpose• Maintainable• Modular• Composable

Pros

Page 29: Building Angular Apps using Directives as Components

What’s Next in Angular?

Page 30: Building Angular Apps using Directives as Components

AngularJS1.5 Beta

.component()

Page 31: Building Angular Apps using Directives as Components

// before.directive('todo-item', function todoItem() { return { };});

// after.component('todo-item', { });

Page 32: Building Angular Apps using Directives as Components

// before.directive('todoItem', function todoItem() { return { scope: {}, bindToController: { item: '=' } };});

// after.component('todoItem', { bindings: { item: '=' }});

Page 33: Building Angular Apps using Directives as Components

// 1.4{ ... controller: 'SomeCtrl', controllerAs: 'something' ...}

// 1.5{ ... controller: 'SomeCtrl as something' ...}

Page 34: Building Angular Apps using Directives as Components

The Core Concepts of Angular 2VICTOR SAVKIN

Page 35: Building Angular Apps using Directives as Components

@Component({ selector: 'talk-cmp', directives: [FormattedRating, WatchButton, RateButton], templateUrl: 'talk_cmp.html'})class TalkCmp { @Input() talk: Talk; @Output() rate: EventEmitter; //...}

Page 36: Building Angular Apps using Directives as Components

If you are familiar with Angular 1, you must be wondering “What happened to directives?”

“A component is a directive with a template.”

Page 37: Building Angular Apps using Directives as Components

Articles

Imageshttps://www.flickr.com/photos/thorinside/https://www.flickr.com/photos/davehamster/https://www.flickr.com/photos/petergorges/https://www.flickr.com/photos/x-ray_delta_one/https://www.flickr.com/photos/marirn/https://www.flickr.com/photos/boedker/https://www.flickr.com/photos/kentamabuchi/https://www.flickr.com/photos/gerq/https://www.flickr.com/photos/capi_camagua/

https://www.youtube.com/watch?v=rI8tNMsozo0http://teropa.info/blog/2014/10/24/how-ive-improved-my-angular-apps-by-banning-ng-controller.htmlhttp://busypeoples.github.io/post/thinking-in-components-angular-js/http://toddmotto.com/exploring-the-angular-1-5-component-method/http://victorsavkin.com/post/118372404541/the-core-concepts-of-angular-2

Page 38: Building Angular Apps using Directives as Components

THANK YOU