2016-02-06 5 views
0

Я пытаюсь поймать все якорные клики и играть с href's. поэтому я написал ниже директивугловая директива компиляция/ссылка не получает вызов

app.directive('a', function() { 
     return { 
      restrict: 'E', 
      link: function(scope, elem, attrs) { 
       if(attrs.ngClick || attrs.href === '' || attrs.href === '#'){ 
        elem.on('click', function(e){ 
         alert(attrs.href); 
         e.preventDefault(); 
        }); 
       } 
      } 
     }; 
    }) 

я попытался дать это в моем app.js, а также в MyCtrl.js файлах. где мой модуль declartion этот путь в myCtrl.js:

var AppControllers = angular.module('starter.controllers'); 
AppControllers 

Его работают в другом ионном проекте. Не знаю, где я ошибаюсь. Кто-нибудь может мне помочь?

+0

Пожалуйста, добавьте HTML –

+0

в основном я хочу, чтобы поймать все тег привязки независимо от моего HTML –

ответ

0

Обновленный ответ после прочтения комментариев

Вы можете переопределить a директиву. Но вы должны убедиться, что вы переопределяете поведение по умолчанию, чтобы предотвратить увольнение обработчика кликов привязки angularjs.

app.directive('a', function() { 
    return { 
    restrict: 'E', 
    scope: true, 
    compile: function(element, attr) { 
     element.bind('click', function(event) { 
     alert('clicked on link: ' + attr.href) 
     event.preventDefault(); // IMPORTANT 
     }); 
    } 
    } 
}); 

Кроме того, при попытке привязать к HTML, вы могли бы хотеть убедиться, что вы скомпилировать его, чтобы убедиться, что ваш якорь тегов директивы пинки в Существует директива, которая может сделать это для вас:.

app.directive('bindHtmlCompile', ['$compile', function($compile) { 
    return { 
    restrict: 'A', 
    link: function(scope, element, attrs) { 
     scope.$watch(function() { 
     return scope.$eval(attrs.bindHtmlCompile); 
     }, function(value) { 
     element.html(value); 
     $compile(element.contents())(scope); 
     }); 
    } 
    }; 
}]); 

Источник: https://stackoverflow.com/a/29994559/841804

таким образом, вместо ng-bind-html, вы можете использовать bind-html-compile так:

<span bind-html-compile="getHtml()"></span> 

И, наконец, вот plunker, что делает именно это: http://plnkr.co/edit/efJw8f40gYIaXo5Bdv44?p=preview

+0

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

+0

Тогда было бы очень сложно выяснить, что происходит. Как насчет быстрого плункера? – Chanthu

+0

Я пытаюсь сделать то же самое с jQlite. путем обнаружения щелчка якоря в моем классе miniorPara вложен. пытаясь использовать queryselector. это будет работать? Есть идеи? –