É 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.