6

我正在创建一个指令,其中 onclick 将用户带到另一个页面。有点像自定义的“href”标签。我希望 $location 会处理重定向功能,但由于我不知道的原因,这是行不通的。如果我在控制器中使用 $location 它可以工作,但在指令中,它不会。这是代码:

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);
                    });
            }
        }
    }]);

还尝试将控制器作为指令的一部分。IE

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); 
                    });
            }
        }
    });

这也行不通。问题是什么?以及如何在指令中使用 $location ?

4

1 回答 1

6

因此,根据上面的评论,任何时候你在 Angular 自己的事件处理程序(ng-click等)之外调用 Angular,你都必须调用$scope.$apply(). JQuery 事件是人们忘记调用的最常见的情况$apply()

于 2013-09-28T18:56:14.693 回答