2013-09-28 40 views
6

我正在創建一個指令,其中onclick將用戶帶到另一個頁面。有點像定製的「href」標籤。我希望$ location會照顧重定向功能,但由於我不知道的原因,這是行不通的。如果我在一個控制器中使用$ location,它可以工作,但是在一個Directive中,它不會。這裏是代碼:

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

也試過有控制器作爲指令的一部分。即

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?

+0

它不起作用,因爲您試圖將路徑設置爲文字字符串「url」,而不是url參數的值。刪除$ location.path(「url」)中url的引號 –

+0

@MarkSherretta這是在這裏複製代碼時的拼寫錯誤。我已更新問題 – dade

+0

現在,$ apply.goToUrl是什麼? –

回答

6

因此,根據上面的評論,只要您在Angular自己的事件處理程序(ng-click等)之外調用Angular,就必須致電$scope.$apply()。 JQuery事件是人們忘記撥打$apply()最常見的情況。

+1

$ scope。$ apply()where?裏面element.on('click',function(){})? – debuggerpk