Рубрики
Без рубрики

Angularjs Совет: как исправить проблему угловой директивы

Пытаясь исправить угловую директиву? Вот быстрый угловой совет JS, чтобы помочь вам сэкономить время.

Автор оригинала: Mason Hargrove.

Что мне делать, если я найду что-то не так с одной из угловых директив?

Я недавно нашел в варенье при использовании NG-Touch на угловом приложении, над которым я работал. Мое приложение полагается на SEO сильно, поэтому я должен обеспечить большинство моих якорных элементов? href атрибуты с назначенным им URL. На некоторые из якорных элементов я также должен был прикрепить NG-нажмите к элементу для запуска функции в моем контроллере. Это создает проблему для NG-Touch.

Если любой якорный элемент в вашей кодовой базе имеет NG-нажмите и href Прилагаемый атрибут угловой игнорирует ваш URL и запускает NG-клик, как ожидается.

Вот пример моего якорного элемента


Один вариант, который я мог сделать, чтобы решить мою дилемму, состоит в том, чтобы переместить изменение места в функцию внутри моего контроллера, как так.

//Save my url to navigate to on click
var url = '/some/url';

$scope.myControllerFunction = function() {
  $location.path(url);
};

Эта функциональность будет работать, за исключением, что мне придется вручную найти каждый якорный элемент, который имел оба href и NG-нажмите прикрепленный к нему внутри моей кодовой базы. Это оказалось чрезвычайно трудно из-за того, что не было реального способа искать что внутри моего текстового редактора и в моем приложении тысячи якорных элементов.

Где моя хитрость вступает в игру

Недавно я узнал, что если вы создадите 2 директива с тем же именем, что Оба для директив будут применены к элементу. Вот пример.

Чтобы исправить мою проблему, я создал новую директиву NGCLICK, которая условно проверена, имел ли элемент href Прилагается и если нанося намокаемое URL-адрес, если не продолжаться, как обычно. Это выглядело так:

angular.module('ngClick', function( $location ) {
  return {
    link: function(scope, elem, attrs) {
      if(attrs.href) {
        elem.on('touchend', function() {
          $location.path(attrs.href);        
        });
      }
    },
    priority: 1
  };
});

Я приложил событие, чтобы послушать дания, только если href Атрибут присутствует на элементе в доме. Я также дал ему более высокий приоритет, чем нативный NG-Щелчок, чтобы изменить свое местоположение перед родным NG-нажмите Функция RAN.

Почему это полезно?

Это не очень распространенная проблема, в которой могут столкнуться большинство разработчиков, но выполнят этот трюк, позволил мне решить мою проблему без необходимости даже искать элементы в моей кодовой базе! Я никогда не видел никакой документации по созданию новых директив, и я надеюсь, что это может сэкономить вам некоторое время в будущем.

Пожалуйста, прокомментируйте и дайте мне знать, если бы вы могли выиграть от знания любого из этого.

Спасибо!