5

我需要观察 URL 栏上的变化并据此执行某些操作。我想知道添加手表以查看更改的最佳方式是什么?

4

2 回答 2

12

事件存在,它们只是由于某种原因没有记录。

尝试以下事件:$locationChangeStart$locationChangeSuccess

scope.$on('$locationChangeStart', function (event, newLoc, oldLoc){
   console.log('changing to: ' + newLoc);
});

scope.$on('$locationChangeSuccess', function (event, newLoc, oldLoc){
   console.log('changed to: ' + newLoc);
});

或者您可以按照 Anders 的建议通过将函数传递给 $watch 的第一个参数来 $watch 任何您想要的值:

scope.$watch(function() { return $location.path(); }, function(newLoc, oldLoc){
   console.log(newLoc, oldLoc);
});

然而,这会在你的 $digest 上产生更多的开销。

于 2013-02-19T15:45:29.517 回答
1

假设您在控制器中请求了 $location 对象,您可以这样做:

$scope.$watch(function() { return $location.path() }, function() {
    // Do stuff when the location changes
});
于 2013-02-19T14:38:33.287 回答