Estou usando o AngularJS 1.2 e tentando incluir um plugin jQuery por meio de uma diretiva angular. Como exemplo, eu escolhi um plugin chamado espectro. Não incluí (e não desejo incluir) o jQuery separadamente, pois o AngularJS inclui o jqLite, uma versão menor do jQuery.
myDirs.directive("spectrumDir", function() {
return {
restrict: "A",
link: function(scope, element, attrs) {
angular.element(element).spectrum(scope.$eval(attrs.spectrumDir));
}
};
});
No entanto, quando tento carregar o aplicativo, recebo:
Não detectado ReferenceError: jQuery não está definido spectrum.js: 1888 (função anônima)
O erro decorre da inicialização do plug-in:
(function (window, $, undefined) {
…code…
})(window, jQuery);
Qual é a solução genérica para incluir plugins jQuery no AngularJS? Existe alguma maneira elegante de conseguir isso sem incluir a biblioteca jQuery completa?
O AngularJS vem com um liteimplementação do jQuery referido para como jqLite. Para os propósitos da Angular, esse é efetivamente jQuery, embora extremamente estripado. Os criadores do Angular acreditam que o A API jqLite é suficiente para quase todas as aplicações, se utilizada devidamente.
Respostas:
2 para resposta № 1Como "Arun P Johny" disse, você PRIMEIRO deve incluir o jquery javascript e, em seguida, o seu plugin, que depende do jQuery
1 para resposta № 2
o que você quer fazer é no plug-in, em vez de (window, jQuery) exportar jqLite, que é angular.element. So (window, angular.element);
Ou ainda mais fácil antes de inicializar seu aplicativo angular, adicione window.jQuery = window. $ = angular.element;
Como a primeira linha de js no seu arquivo de script principal,se o plugin não usar nenhum método que o jqLite não cubra, você está com sorte! Caso contrário, talvez inclua o Zepto para uma alternativa leve ao jquery e no retorno do plugin (window, Zepto);