angular element.click 和 $location.search 的怪异

angular weirdness with element.click and $location.search

问题来了

<div id="my-id" ng-click="moveOn(10)">Click me</div>

在我的指令中

scope.moveOn = function (val) {
    $location.search('id', val);
}

最后,在这个指令的父级中,我监听了这个 id

的变化
 $scope.$watch(function () {
    return $routeParams.id;
 }, function (newId, oldId) {
     ...
 });

此设置效果很好,在调用 $location.search 后立即触发 $watcher。但现在我也有一个指令,它稍微不同,如下所示:

element.find('#my-id').click(function (val) {
    $location.search('id', val);
});

模板中没有ng-click!

在这种情况下,我还可以看到对 $location.search 的调用已完成,但现在需要很长时间(几秒钟)才能关闭观察器。

因此,出于某种原因,ngClick 与绑定到点击事件之间肯定存在差异。有什么建议吗?

您正在 angular 之外的事件中更新 angular。

尝试使用 $apply 通知 angular 更改,以便它可以 运行 摘要

element.find('#my-id').click(function (val) {
    scope.$apply(function(){
       $location.search('id', val);
    });
});