使用element.click和$ location.search进行角度怪异

时间:2015-10-30 18:15:49

标签: javascript angularjs directive

这是问题

<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后立即触发$watch。但是现在我还有一个指令,它略有不同,如下所示:

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

在模板中没有ng-click

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

因此,出于某种原因,ngClick和绑定到click事件之间必须存在差异。有什么建议可能会在这里发生什么?

1 个答案:

答案 0 :(得分:1)

您正在更新角度内的事件中更新角度。

尝试使用$apply通知角度更改,以便运行摘要

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