Javascript 如何在AngularJs中的指令中使用$location
我正在创建一个指令,其中onclick将用户带到另一个页面。有点像定制的“href”标签。我希望$location可以处理重定向功能,但由于我不知道的原因,这不起作用。如果我在控制器中使用$location,它可以工作,但在指令中不工作。代码如下:Javascript 如何在AngularJs中的指令中使用$location,javascript,angularjs,Javascript,Angularjs,我正在创建一个指令,其中onclick将用户带到另一个页面。有点像定制的“href”标签。我希望$location可以处理重定向功能,但由于我不知道的原因,这不起作用。如果我在控制器中使用$location,它可以工作,但在指令中不工作。代码如下: angular.module("myAPP") .directive('hpHref', ['$location' , function($location){ return { restrict :
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);
});
}
}
}]);
还尝试将控制器作为指令的一部分。i、 e
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?因此,根据上面的评论,任何时候在Angular自己的事件处理程序之外调用Angular(
ng单击
等),都必须调用$scope.$apply()
)。JQuery事件是人们忘记调用$apply()
的最常见情况,它不起作用,因为您试图设置文本字符串“url”的路径,而不是url参数的值。删除$location.path(“url”)@MarkSherretta中url周围的引号,这是复制此处代码时的一个输入错误。我现在已经更新了这个问题,$apply.gotour是什么?更改jQuery事件处理程序中的位置后,必须调用$scope.apply()
。@NikosParaskevopoulos Ha!记住.bind是由AngularJs中包含的JQuery lite提供支持的…所以是的,你的建议很有效!介意把它作为一个答案吗?$scope.$apply()在哪里?在('click',function(){})上?