On Github cironunes / angular-components-talk
by Ciro Nunes / @cironunesdev
#AngularJSSP 20 de Junho '14
angular.module('myApp', []);
Qual é a feature que possibilita programar UIs de forma declarativas?
Hoje vamos falar sobre componentes (ou diretivas) AngularJS
$ bower search angular-ui $ bower install angular-ui --save
angular.module('myApp', ['ui']);
Crie um módulo para suas diretivas
angular.module('myDirectives', []);
Inclua esse módulo no módulo da aplicação
angular.module('myApp', ['myDirectives']);
angular.module('myDirectives') .directive('myGreet', function() { return { restrict: 'A', // já vamos falar sobre isso! template: '
Atributos:
restrict: 'A'
Elementos:
restrict: 'E'
Atributos e elementos:
restrict: 'AE'
angular.module('myDirectives', []) .directive('myGreet', function() { return { restrict: 'E', template: '
Vamos deixar as coisas um pouco mais dinâmicas...
.controller('MyCtrl', function($scope) { $scope.person = 'SP'; }) .directive('myGreet', function() { return { restrict: 'E' template: '
Não herdam dos seus pais
Componentes devem ser reutilizáveis
angular.module('myDirectives', []) .controller('MyCtrl', function() { $scope.person = 'John'; }) .directive('myGreet', function() { return { restrict: 'E', template: '
scope: { person: '@', // top-down age: '=', // two-way data-binding sayHello: '&' // bottom-up }
Onde a manipulação do DOM deve ser feita
app.directive('myGreet', function() { return { restrict: 'E', template: /* snip */, link: function($scope, $element, $attrs) { $element.on('click', function() { // do something }); } } });
Compile: cria a diretiva prepara uma linkFn
Link: liga a diretiva ao escopo usando a linkFn
Lorem ipsum dolor sit amet
.directive('myModal', function() { return { restrict: 'E', transclude: true, template: '
#1 Convenção de nomenclatura
#2 Encapsulamento
#3 Customização
Protip: Use um generator!
#1 Crie um repositório
#2 bower init
#3 Crie seu componente seguindo as boas práticas
#4 Não se esqueça dos testes!
#5 bower publish
is hiring Front-end Engineers
mailto:cnunes@questrade.com