javascript - Cum să folosești $location în Directives în AngularJs
Creez o directivă în care, la onclick, utilizatorul este dus către o altă pagină. În oarecare măsură, ca un tag "href" personalizat. Speram că $location se va ocupa de funcția de redirecționare, dar din motive pe care nu le cunosc încă, acest lucru nu funcționează. Dacă folosesc $location într-un controller, funcționează, dar din interiorul unei Directive, nu. Iată codul:
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);
});
}
}
}]);
De asemenea, am încercat să am un controler ca parte a Directivei, adică
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);
});
}
}
});
Și aceasta nu funcționează. Care este problema? Și cum poate fi folosit $location în cadrul Directivelor?
Răspuns #1
Deci, conform comentariului de mai sus, orice dată când apelezi Angular în afara propriilor manipulatoare de evenimente ale Angular (ng-click etc.), trebuie să apelezi $scope.$apply(). Evenimentele JQuery sunt cel mai frecvent caz în care oamenii uită să apeleze $apply().