Evitando uso de variáveis globais em sistemas utilizando AngularJs

image_pdfimage_print

É muito comum ver programadores fazendo uso de bibliotecas externas ao AngularJs de maneira global. Esta prática rompe as vantagens da DI – Dependency injection disponibilizada pelo modelo AngularJs, afetando vários pontos do sistema, principalmente a capacidade de testá-lo e clareza do código para leitura / entendimento.

Iremos sugerir uma das possíveis formas de encapsular em módulos que podem ser injetados estas bibliotecas globais em módulos padrões AngularJs.

Iremos exemplificar utilizando a grande biblioteca Javascript Underscore.js, responsável por simplificar códigos no padrão funcional. Para torna-la um módulo, basta:

var underscore = angular.module('underscore', []);
underscore.factory('_', function() {
    //Underscore já deve ter sido carregado na página HTML
    return window._;
 });

var app = angular.module('app', ['underscore']);

app.controller('Ctrl', ['$scope', '_', function($scope, _) {
    init = function() {
        _.keys($scope);
    }
    init();
}]);

Eis ai uma excelente prática que em modo strict (use strict) torna-se obrigatória. Sugerimos que faça uso deste modo.

Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!