繁体   English   中英

范围值更改不会被$ watch指令捕获

[英]scope value change doesn't get caught by $watch in directive

我从这里开始关注文档。 这是我根据建议创建的指令。

.directive('setFocusIf', function() {
  return {
    link: function($scope, $element, $attr) {
      $scope.$watch($attr.setFocusIf, function(value) {
        if (value) { $element[0].focus(); }
      });
    }
  };
});

和我的标记:

<input set-focus-if="hasFocus" ng-focus="hasFocus = false">

<button type="button" ng-click="addItem()">Add</button>

addItem()函数执行某些操作,并将hasFocus的值设置为true 但是,这不起作用,并且该元素也没有得到关注。 在调试时,我发现$watch本身没有被调用。

但是 ,当我在按钮中设置类似ng-click="hasFocus = true" ,而不是在addItem()函数中将hasFocus设置为true时,它可以很好地工作。

我尝试将其包含在$apply但似乎没有用,而且我对其内部也不十分清楚。 我想我在这里缺少一些基础知识,有人可以指出这两种方法之间的区别是什么。

这是一个显示问题的小插曲

好的,在尝试了不同的东西之后,我发现它与作用域中的点有关。

我改变了这个

<input set-focus-if="hasFocus" ng-focus="hasFocus = false">

对此

<input set-focus-if="focus.hasFocus" ng-focus="focus.hasFocus = false">

当然, addItem现在设置$scope.focus.hasFocus = true;

现在可以正常使用了...

另外,我需要了解以这种方式设置焦点是否正确。 因为这不适用于需要关注不同场合/事件的多个元素,除非修改指令以使其相应地起作用。 但是它仍然不是有效的,因为$watch将被每个具有set-focus-if指令的元素调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM