Элемент угловой директивы

#javascript #jquery #angularjs #angular-directive

#javascript #jquery #angularjs #angular-директива

Вопрос:

У меня есть эта директива:

 function dndDirective($timeout) {

  return {
    template: '<div class="dndComponent"> Title: {{title}} </div>',
    scope: {
      title: '<'
    },
    compile: myCompile
  };

      function myCompile(tElement, tAttrs, transclude) {
        return {
          pre: function postLink($scope, element, attrs, transclude) {

            $scope.$watchGroup(['title'], function(newVals) {
              $timeout(function() {
                jQuery('.dndComponent').first().myPlugin();
                jQuery(element).myPlugin();
              });
            })
          }
        }
      }
  

Почему jQuery('.dnd').first() объект отличается jQuery(element) от? Они имеют разные контексты, и мой плагин jQuery может работать только с первым вариантом.

Комментарии:

1. Второй аргумент функции postLink

2. jQuery('.dnd') найдет первый элемент в любом месте страницы с этим классом. Помимо этого недостаточно известно

3. Это не объясняет, что такое элемент. Что такое html?

4. ^^ обратите внимание, что должно быть сказано jQuery('.dnd').first() , как в вопросе

5. @JoeyWood html находится в поле объявления директивы template

Ответ №1:

jQuery(element) возвращает оболочку jQuery элемента, в котором используется директива. jQuery('.dndComponent').first() возвращает первый элемент с этим классом.

Предполагая, что директива используется только один раз (не полагайтесь на это), селектор возвращает дочерний элемент element , element является родительским элементом ‘.dndComponent’;

===

Подумайте также о том, чтобы выполнить $(element).find(‘.dndComponent’), потому что таким образом вы можете использовать свою директиву N раз, и она всегда будет работать, в противном случае она всегда будет возвращать .dndComponent значение первой директивы.