javascript - Hvordan bruke $location i direktiver i AngularJs
Jeg lager en direktiv der onclick tar brukeren til en annen side. Litt som en tilpasset "href"-tagg. Jeg håpet at $location ville ta seg av omdirigeringsfunksjonen, men av grunner jeg ikke vet enda, fungerer dette ikke. Hvis jeg bruker $location i en kontroller, fungerer det, men fra innenfor en direktiv gjør det ikke det. Her er koden:
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øvde også å ha en kontroller som en del av direktivet. dvs.
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);
});
}
}
});
Dette fungerer heller ikke. Hva er problemet? Og hvordan kan $location brukes innenfor direktiver?
Svar #1
Så, i henhold til kommentaren ovenfor, hver gang du kaller Angular utenfor Angulars egne hendelsesbehandlere (ng-click osv.), må du kalle $scope.$apply(). JQuery-hendelser er det mest vanlige tilfellet der folk glemmer å kalle $apply().