javascript - Hur man använder $location i direktiv i AngularJs


Jag skapar en direktiv där onclick tar användaren till en annan sida. Något liknande en anpassad "href"-tagg. Jag hoppades att $location skulle ta hand om omdirigeringsfunktionen men av okända skäl fungerar detta inte än. Om jag använder $location i en controller fungerar det, men från ett Directiv gör det inte det. Här är 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);
                    });
            }
        }
    }]);

Försökte också 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); 
                    });
            }
        }
    });

Detta fungerar inte heller. Vad är problemet? Och hur kan $location användas inom Direktiven?

Svar #1

Så, enligt kommentaren ovan, varje gång du anropar Angular utanför Angulans egna händelsehanterare (ng-click etc), måste du anropa $scope.$apply(). jQuery-händelser är det vanligaste fallet där folk glömmer att anropa $apply().