2

Я использую AngularJS 1.2 и пытаюсь включить плагин jQuery через Угловую директиву. В качестве примера я выбрал плагин под названием spectrum. Я не включил (и не хочу включать) jQuery отдельно, поскольку, как говорят, AngularJS включает jqLite, меньшую версию jQuery.Как использовать плагины jQuery в AngularJS?

myDirs.directive('spectrumDir', function() { 
    return { 
     restrict: 'A', 
     link: function(scope, element, attrs) { 
      angular.element(element).spectrum(scope.$eval(attrs.spectrumDir)); 
     } 
    }; 
}); 

Однако, когда я пытаюсь загрузить приложение, я получаю:

Uncaught ReferenceError: jQuery is not defined spectrum.js:1888 (anonymous function)

ошибка проистекает из инициализации плагина:

(function (window, $, undefined) { 
    …code… 
})(window, jQuery); 

Что такое общее решение в том числе плагины jQuery в AngularJS? Есть ли какой-либо изящный способ достичь этого, не включая полную библиотеку jQuery?

AngularJS comes bundled with a lite implementation of jQuery referred to as jqLite. For Angular’s purposes, this is effectively jQuery, albeit an extremely gutted one. The creators of Angular believe the jqLite API to be sufficient for nearly every application if utilized properly.

+2

У вас есть библиотека jQuery, включенная в страницу, и включена ли она в плагин –

+2

Если плагин зависит от jquery, вы не можете использовать его без jquery. AngularJS не собирается делать каких-либо магии, чтобы позволить зависимости уйти :) – Chandermani

+0

Включить jQuery, поскольку это плагин «jQuery». – geniuscarrier

ответ

2

Как «Arun P Johny» сказал, вы должны сначала включить JQuery Javascript, а затем ваш плагин, который зависит от JQuery

1

то, что вы хотите сделать, это в плагине либо вместо (окна, JQuery) экспорт jqLite, который является угловым.элементом. Итак (окно, угловой.элемент);

Или еще проще перед инициализацией вашего углового приложения добавить window.jQuery = window. $ = Angular.element;

Как первая строка js в вашем главном файле сценария, если плагин не использует какие-либо методы, которые jqLite не покрывает, вам повезло! В противном случае возможно включить Zepto для альтернативы jquery легкого веса и в возврате плагина (окно, Zepto);

Смежные вопросы