2014-09-15 2 views
0

Я пытаюсь написать директиву AngularJS с именем «insert-after-parent», которая вставляет содержимое после его родителя. Внутри этой директивы я использую jQuery для выбора родительского элемента. Поскольку AngularJS основан на jQuery, я загружаю сначала jQuery и структуру AngularJS. Но когда я это делаю, моя директива не работает. Но если я сначала загружаю AngularJS, а затем структуру jQuery, он работает. Может кто-нибудь сказать мне почему?Различное поведение из-за порядка импорта AngularJS и jQuery

angular.module('ls', []).directive('insertAfterParent', ["$compile", function($compile){ 
    return { 
     restrict: 'E', 
     link: function(scope, element, attrs){ 
      scope.$watch(function(scope) { 
       return scope.$eval(attrs.src) 
      }, function(id) { 
       if(id){ 
        var content = $('script[type="text/ng-template"][id="' + id + '"]').html() 
        if(content){ 
         $compile($(content).insertAfter(element.parent()))(scope) 
        } 
       } 
      }) 
     } 
    } 
    }]) 

Вот ссылка на мой plunkr: http://plnkr.co/edit/gTXk0bjyQ6nTTCaB9Czg?p=preview

Я использую угловой 1.2.23 и JQuery 1.7.1 Согласно документации (AngularJS FAQ), эти версии совместимы.

ответ

0

Как вы сказали, у углового есть сокращенная версия jquery. Как только вы загружаете углы - ваш полный jQuery body будет перезаписан с урезанной версией.

И, пожалуйста, не загружайте jquery. Вам это не нужно - если вы каким-то образом не обновляете старое jQuery-решение для angularjs ... Когда вам оказывается, что вам нужно jquery, это приложение вашего приложения «неправильно» или, наконец, не сделано угловым способом - декларативным.

+0

Версия jqLite AngularJS не включает все функции, которые мне нужны для моих директив. Вот почему мне нужно импортировать jQuery. В FAQ также говорится, что вы можете использовать jQuery в AngularJS: https://docs.angularjs.org/misc/faq https://docs.angularjs.org/api/ng/function/angular.element – lonnenjunior

+0

Я не думаю, что вам нужны эти функции, если вы правильно используете углы. Когда это сказано, мой пост не отвечает на ваш вопрос? –

+0

Я попытался выполнить директиву полностью в AnulgarJS. Но я не могу сделать insertAfter(), потому что он не поддерживается jqLite. – lonnenjunior