作用域值的变化不会被指令中的$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
中,但似乎不起作用,我对它的内部不是很清楚。我想我在这里漏掉了一些基本的东西,有人能指出这两种方法的区别吗?
这是一个显示问题的柱塞
好的,在尝试了不同的东西之后,我发现它与作用域中的点有关。
I changed this
<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
指令。
相关文章:
- 指令$watch不会在更改时触发
- AngularJS Watch输入有效性指令
- $watch使用隔离范围时从角度指令内部更改值
- AngularJS:$scope.$watch 不会更新从自定义指令$resource获取的值
- 在指令中使用 $scope.$watch 处理未定义变量的替代方法
- 在指令中对$watch进行了一个小实验
- AngularJS$watch指令内不触发
- Scope.watch 在指令中调用在开头 angularjs
- 角度范围.$watch在指令中不起作用
- [自定义指令]将范围.$watch放在链接上与将范围.$watch放在控制器上的区别
- 指令不会在$watch上执行
- 指令回调函数未从$watch内部启动
- 在指令中使用$watch的单个值对范围进行角度更新
- angularjs:在指令中使用$watch调用serivce
- 范围$指令中的watch't在AJAX请求后被调用
- angularJS$watch在使用控制器更新数据时不在指令中工作
- 控制器中的$watch在将项推入指令中的数组时未启动
- AngularJS指令$watch双向绑定
- Angular:控制器和指令之间的共享数据.$watch是如何工作的
- 使用controllerAs语法通过$watch指令更改父控制器模型