Top Banner
MODULAR ANGULARJS
60

Modular Angular JS

Apr 16, 2017

Download

Software

Dhyego Fernando
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Modular Angular JS

MODULAR ANGULARJS

Page 2: Modular Angular JS

WHO AM I?

@dhyegofernando

Page 3: Modular Angular JS

PLUGINS? I SEE EVERYWHERE

Page 4: Modular Angular JS

VANILLA JS PLUGINS

var plugin = new Plugin(document.querySelector('.plugin­selector'));

Page 5: Modular Angular JS

JQUERY PLUGINS

$('.plugin­selector').plugin();

Page 6: Modular Angular JS
Page 7: Modular Angular JS

ANGULARJS FTW

Page 8: Modular Angular JS

WHY ANGULARJS?

Page 9: Modular Angular JS

DATA-BINDING

Page 10: Modular Angular JS

DATA-BINDING JQUERY EXAMPLE

$('#input­name').on('change', function() $('#greeting­name').text(this.value); );

Page 11: Modular Angular JS

ONE WAY DATA-BINDING

Page 12: Modular Angular JS

TWO WAY DATA-BINDING

Page 13: Modular Angular JS

DATA-BINDING EXAMPLE

<div ng­app> <label>Name:</label> <input type="text" ng­model="yourName"> <hr> <h1>Hello yourName!</h1> </div>

Page 14: Modular Angular JS

DEPENDENCY INJECTION

Page 15: Modular Angular JS

DEPENDENCY INJECTION EXAMPLE

Page 16: Modular Angular JS

DEPENDENCY INJECTION EXAMPLE<div ng­app="app" ng­controller="GreetingController"> <form ng­submit="greet()"> <input type="text" ng­model="name"> <button type="submit">Greet</button> </form> </div>

angular.module('app', []) .controller('GreetingController', function($scope) $scope.name = 'John Doe'; $scope.greet = function() alert('Hello ' + $scope.name); ; );

Page 17: Modular Angular JS

DIRECTIVES

Page 18: Modular Angular JS

TAB COMPONENT

Page 19: Modular Angular JS

NON-SEMANTIC TAB COMPONENT<div id="tab"> <ul class="tab­head"> <li><a href="#content­1">Title 1</a></li> <li><a href="#content­2">Title 2</a></li> <li><a href="#content­3">Title 3</a></li> </ul> <div id="content­1" class="tab­content"> <p>Content 1 goes here</p> </div> <div id="content­2" class="tab­content"> <p>Content 2 goes here</p> </div> <div id="content­3" class="tab­content"> <p>Content 3 goes here</p> </div> </div>

$('#tab').tab();

Page 20: Modular Angular JS
Page 21: Modular Angular JS

SEMANTIC TAB COMPONENT<tabset> <tab heading="Title 1"> <p>Content 1 goes here</p> </tab> <tab heading="Title 2"> <p>Content 2 goes here</p> </tab> <tab heading="Title 3"> <p>Content 3 goes here</p> </tab> </tabset>

Page 22: Modular Angular JS
Page 23: Modular Angular JS

NOW LET'S LET THE THINGS A LITTLE BIT MORE INTERESTING

Page 24: Modular Angular JS

TODO APP

Page 25: Modular Angular JS

FEATURESTasks

ListAddMark/Unmark as completeArchive

Page 26: Modular Angular JS

TODO APP: THE WRONG WAY

Page 27: Modular Angular JS

STRUCTURE|­­ js/ | |­­ controllers.js | |­­ directives.js | |­­ services.js | |­­ app.js |­­ index.html

Page 28: Modular Angular JS

index.html

... <div ng­controller="TodoController"> <span>remaining() of tasks.length remaining</span> [ <a href="" ng­click="archive()">archive</a> ] <ul> <li ng­repeat="task in tasks"> <input type="checkbox" ng­model="task.done"> <span class="done­task.done">task.text</span> </li> </ul> <form ng­submit="addTask()"> <input type="text" ng­model="taskText"> <input type="submit" value="add"> </form> </div> ...

Page 29: Modular Angular JS

app.js

angular.module('app', ['app.controllers']);

controllers.js

angular.module('app.controllers') .controller('TodoController', ['$scope', function($scope) $scope.tasks = []; $scope.addTask = function() // ... ; $scope.remaining = function() // ... ; $scope.archive = function() // ... ; ]) .controller('OtherController', ['$scope', function($scope) // ... ]);

Page 30: Modular Angular JS
Page 31: Modular Angular JS

COMMON APPROACH MISTAKES

Page 32: Modular Angular JS

FILES STRUCTURE

Page 33: Modular Angular JS

NEVERSEPARATE FILES IN FOLDER BY THEIR TYPE

|­­ js/ | |­­ controllers.js | |­­ directives.js | |­­ services.js | |­­ app.js |­­ index.html

Page 34: Modular Angular JS

ALWAYSSEPARATE FILES IN THEIR COMPONENT NAME FOLDER

|­­ src/ | |­­ todo/ | | |­­ todo.html | | |­­ todo.module.js | | |­­ todo.config.js | | |­­ todo.controller.js| | |­­ todo.controller.spec.js | |­­ tasks/ | | |­­ tasks.module.js | | |­­ tasks.service.js | | |­­ tasks.service.spec.js | | |­­ tasks.directive.js| | |­­ tasks.directive.spec.js | |­­ app.module.js | |­­ index.html

Page 35: Modular Angular JS

MODULES (OR LACK THEREOF)

Page 36: Modular Angular JS

NEVERSEPARATE MODULES BY THEIR TYPE

controllers.js

angular.module('app.controllers') .controller('TodoController', ['$scope', function($scope) $scope.tasks = []; $scope.addTask = function() // ... ; $scope.remaining = function() // ... ; $scope.archive = function() // ... ; ]) .controller('OtherController', ['$scope', function($scope) // ... ]);

Page 37: Modular Angular JS

ALWAYSSEPARATE MODULES BY THEIR COMPONENT NAME

todo/todo.controller.js

angular.module('todo') .controller('TodoController', ['$scope', function($scope) $scope.tasks = []; $scope.addTask = function() // ... ; $scope.remaining = function() // ... ; $scope.archive = function() // ... ; ]);

app.module.js

angular.module('app', [ 'todo' ]);

Page 38: Modular Angular JS

TOO MANY CONTROLLERS RESPONSIBILITY

Page 39: Modular Angular JS

NEVERLET CONTROLLERS DO A LOT OF OTHER THINGS

(LIKE PERSIST)

controllers.js

angular.module('app.controllers') .controller('TodoController', ['$scope', function($scope) $scope.tasks = []; $scope.addTask = function() // ... ; $scope.remaining = function() // ... ; $scope.archive = function() // ... ; ]) ...

Page 40: Modular Angular JS

ALWAYSLET CONTROLLERS AS CLEAN AS POSSIBLE

(AND ISOLATE SHARED BEHAVIOURS IN SERVICES)

Page 41: Modular Angular JS

todo/todo.controller.js

angular.module('todo') .controller('TodoController', ['$scope', 'Tasks', function($scope) $scope.tasks = Tasks.get(); $scope.addTask = function() Tasks.add(); ; $scope.remaining = function() Tasks.count(); ; $scope.archive = function() Tasks.archive(); ; ]);

tasks/tasks.service.js

angular.module('tasks') .factory('Tasks', ['$http', function($http) return get: function() $http.get(); , add: function() $http.post(); , count: function() $http.get().length; , archive: function() $http.put(); ; ]);

Page 42: Modular Angular JS
Page 43: Modular Angular JS

JUST SOME TIPS TO KEEP THINGS BETTER...

Page 44: Modular Angular JS

SHARE BEHAVIOURS THROUGH COMPONENTS BUT

DO NOT REINVENT THE WHEEL

Page 45: Modular Angular JS

HOW TO LOOK FOR A COMPONENT

Page 46: Modular Angular JS

WHERE TO FIND COMPONENTS?

Page 47: Modular Angular JS

ANGULARJS DOCS

Page 48: Modular Angular JS

BOWER.IO

Page 49: Modular Angular JS

NGMODULES.ORG

Page 50: Modular Angular JS

HOW TO USE A COMPONENT?Download or Install the component

bower install ­­save angular­material

Load the component files

<link href="angular­material.min.css" rel="stylesheet"> <script src="angular­material.min.js">

Set as a module dependency

angular.module('app', [ 'ngMaterial' ]);

Page 51: Modular Angular JS
Page 52: Modular Angular JS

WHAT DO I HAVE TO DO TO BUILD MY OWN COMPONENT?

Page 53: Modular Angular JS

WRITE GREAT TESTS

Page 54: Modular Angular JS

WRITE SOME DOCUMENTATION

Page 55: Modular Angular JS

FOLLOW THE STYLE GUIDE

Page 56: Modular Angular JS

USE GENERATORS

Page 57: Modular Angular JS

AND FINALLY PUBLISH ITbower init && bower publish

Page 58: Modular Angular JS

QUESTIONS?

Page 59: Modular Angular JS

NOW... IT'S UP TO YOU

Page 60: Modular Angular JS

THANK YOU

github.com/dhyegofernando

twitter.com/dhyegofernando

SLIDESbit.ly/1F3KyH2