Автор оригинала: 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.
Почему это полезно?
Это не очень распространенная проблема, в которой могут столкнуться большинство разработчиков, но выполнят этот трюк, позволил мне решить мою проблему без необходимости даже искать элементы в моей кодовой базе! Я никогда не видел никакой документации по созданию новых директив, и я надеюсь, что это может сэкономить вам некоторое время в будущем.
Пожалуйста, прокомментируйте и дайте мне знать, если бы вы могли выиграть от знания любого из этого.
Спасибо!