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?
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") –
@MarkSherretta To był błąd w kopiowaniu kodu tutaj. Zaktualizowałem pytanie: – dade
Co to jest $ apply.goToUrl? –