Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Guía de estilo de AngularJS

Guía de estilo de AngularJS

Presentación para WebDev talks donde abordo temas sobre estilo y mejores prácticas de programación con AngularJS

Avatar for Antonio Chavez

Antonio Chavez

February 19, 2015
Tweet

Other Decks in Programming

Transcript

  1. <!doctype html> <html ng-app="WDTApp"> <head> </head> <body> <div ng-controller="SpeakersController"> <div

    ng-repeat="speaker in speakers"> <p>{{ speaker.talk }}</p> <p>{{ speaker.name }}</p> </div> </div> </body> </html>
  2. angular.module('WDTApp', []) .controller(“SpeakersController", function($scope) { $scope.speakers = [ { talk:

    "Tecnología con cau...”, name: "Carlos Hugo Gonzalez" }, { talk: "Programación reactiva", name: "Oscar Swanros" }, { talk: "Extending app's ar...”, name: "Tonatiuh Núñez" }, { talk: "Guia de estilo de ...”, name: "Antonio Chávez" } ] });
  3. // app.module.js angular .module('WDTApp', []); // speakersController.js angular .module('WDTApp') .controller('SpeakersController',

    SpeakersController); function SpeakersController() { /* Magic... */ } // speaker.js angular .module('WDTApp') .factory('Speaker', Speaker); function Speaker() { /* Magic... */ }
  4. // speakers.js angular .module('WDTApp') .factory('Speaker', Speaker); // Declaración de función

    global function Speaker() { } // speakersController.js angular .module('WDTApp') .factory('SpeakersController', SpeakersController); // Declaración de función global function SpeakersController() { }
  5. // speakers.js !function() { "use strict"; angular .module('WDTApp') .factory('Speaker', Speaker);

    function Speaker() { } }(); // speakersController.js !function() { "use strict"; angular .module('WDTApp') .factory('SpeakersController', SpeakersController); function SpeakersController() { } }();
  6. // module.js var WDTApp = angular.module('WDTApp',[ 'ngResource', 'WDTApp.registration' ]); //

    speakersController.js WDTApp.controller('SpeakersController', SpeakersController); function SpeakersController() { }
  7. // module.js angular.module('WDTApp',[ 'ngResource', 'WDTApp.registration' ]); // speakersController.js angular .module('WDTApp')

    .controller('SpeakersController', SpeakersController); function SpeakersController() { }
  8. <div ng-controller="SpeakersController as speakers"> <div ng-repeat="speaker in speakers.collection"> <p>{{ speaker.talk

    }}</p> <p>{{ speaker.name }}</p> </div> </div> angular .module('WDTApp') .controller("SpeakersController", SpeakersController); function SpeakersController(){ this.collection = [ { talk: "Tecnología con cau...", name: "Carlos Hugo Gonzalez" }, { talk: "Programación reactiva", name: "Oscar Swanros" }, { talk: "Extending app's ar...", name: "Tonatiuh Núñez" }, { talk: "Guia de estilo de ...", name: "Antonio Chávez" } ] });
  9. <div ng-controller="SpeakersController as vm"> <div ng-repeat="speaker in vm.speakers"> <p>{{ speaker.talk

    }}</p> <p>{{ speaker.name }}</p> </div> </div> angular .module('WDTApp') .controller("SpeakersController", SpeakersController); function SpeakersController(){ var vm = this; vm.speakers = [ { talk: "Tecnología con cau...", name: "Carlos Hugo Gonzalez" }, { talk: "Programación reactiva", name: "Oscar Swanros" }, { talk: "Extending app's ar...", name: "Tonatiuh Núñez" }, { talk: "Guia de estilo de ...", name: "Antonio Chávez" } ] });
  10. angular .module('WDTApp') .factory('speakersRepository', speakersRepository); dataservice.$inject = ['$http', 'logger']; function speakersRepository($http,

    logger) { return { getSpeakers: getSpeakers }; function getSpeakers() { return $http.get('/api/speakers') .then(getSpeakersComplete) .catch(getSpeakersFailed); function getSpeakersComplete(response) { return response.data.results; } function getSpeakersFailed(error) { logger.error('XHR Failed for getSpeakers.' + error.data); } } }
  11. angular .module('WDTApp') .controller('SpeakersController', SpeakersController); SpeakersController.$inject = ['dataservice', 'logger']; function SpeakersController(dataservice,

    logger) { var vm = this; vm.speakers = []; activate(); function activate() { return dataservice.getSpeakers().then(function(data) { vm.speakers = data; return vm.speakers; }); } }
  12. angular .module('WDTApp') .directive('wdtTooltip', wdtTooltip); function wdtTooltip() { return { link:

    function($scope, $element, $attributes) { $element.on("click", function(e) { e.preventDefault(); }); } }; }
  13. ¿Qué es LIFT? • Locating our code is easy •

    Identify code at a glance • Flat structure as long as we can • Try to stay DRY (Don’t Repeat Yourself) or T-DRY
  14. Flat structure (estructura plana) Si tus carpetas hacen un nesting

    de mas de 7 niveles, es tiempo de considerar hacer otro top level.
  15. /** * recommended */ app/ app.module.js app.config.js app.routes.js components/ calendar.directive.js

    calendar.directive.html user-profile.directive.js user-profile.directive.html layout/ shell.html shell.controller.js topnav.html topnav.controller.js people/ attendees.html attendees.controller.js speakers.html speakers.controller.js speaker-detail.html speaker-detail.controller.js services/ data.service.js localstorage.service.js logger.service.js spinner.service.js sessions/ sessions.html sessions.controller.js session-detail.html session-detail.controller.js /* * avoid * Alternative folders-by-type. * I recommend "folders-by-feature", instead. */ app/ app.module.js app.config.js app.routes.js controllers/ attendees.js session-detail.js sessions.js shell.js speakers.js speaker-detail.js topnav.js directives/ calendar.directive.js calendar.directive.html user-profile.directive.js user-profile.directive.html services/ dataservice.j localstorage.js logger.js spinner.js views/ attendees.html session-detail.html sessions.html shell.html speakers.html speaker-detail.html topnav.html