2013-09-28 14 views
6

Tworzę dyrektywę, w której onclick przenosi użytkownika na inną stronę. Trochę jak spersonalizowany tag "href". Miałem nadzieję, że lokalizacja $ zajmie się funkcją przekierowania, ale z powodów, których nie znam, to nie działa. Jeśli użyję $ location w kontrolerze działa, ale z dyrektywy, to nie. Oto kod:

angular.module("myAPP") 
    .directive('hpHref', ['$location' , function($location){ 
     return { 
      restrict : "A", 
      link : function(scope, el, attr) { 
        el.bind('click', function(){ 
         // more logic 
         console.log("Code reaches here:"); 
         $location.path("/" + attr.hpHref); 
        }); 
      } 
     } 
    }]); 

Próbowano również posiadać kontroler jako część dyrektywy. tj.

angular.module("myApp") 
    .directive('hpHref', function(){ 
     return { 
      restrict : "A", 
      scope: {}, 
      controller : ['$scope', '$location', function($scope, $location){ 
       $scope.goToUrl = function (url) { 
        // some more logic 
        console.log("Code reaches here"); 
        $location.path(url); 
       }; 
      }], 
      link : function(scope, el, attr) { 
        el.bind('click', function(){ 
         scope.goToUrl(attr.hpHref); 
        }); 
      } 
     } 
    }); 

To też nie działa. Jaki jest problem? A w jaki sposób można zastosować lokalizację $ w dyrektywach?

+0

To nie działa, ponieważ próbujesz ustawić ścieżkę do literału "url", a nie wartość argumentu url. Usuń cytaty dotyczące adresu URL w $ location.path ("url") –

+0

@MarkSherretta To był błąd w kopiowaniu kodu tutaj. Zaktualizowałem pytanie: – dade

+0

Co to jest $ apply.goToUrl? –

Odpowiedz

6

Tak, jak w powyższym komentarzu, za każdym razem, gdy wywołujesz Angular poza własnymi programami obsługi zdarzeń Angular (ng-click itp.), Musisz zadzwonić pod numer $scope.$apply(). Zdarzenia JQuery są najczęstszymi przypadkami osób, które zapominają zadzwonić pod numer $apply().

+1

$ scope. $ Apply() gdzie? wewnątrz elementu element.on ("kliknij", funkcja() {})? – debuggerpk

Powiązane problemy