Javascript 范围值更改不会发生';不要在指令中被$watch抓住
我正在跟踪来自的文档。这是我根据建议创建的指令Javascript 范围值更改不会发生';不要在指令中被$watch抓住,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我正在跟踪来自的文档。这是我根据建议创建的指令 .directive('setFocusIf', function() { return { link: function($scope, $element, $attr) { $scope.$watch($attr.setFocusIf, function(value) { if (value) { $element[0].focus(); } }); } }; }); 和我的标记
.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
,如果指令设置焦点。好的,在尝试了不同的东西之后,我发现它与范围内的点有关
我改变了这个
<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代码>
它现在工作得很好
另一方面,我需要了解这样设置焦点是否正确。因为这不适用于需要关注不同场合/事件的多个元素,除非相应地修改该指令。但是它仍然没有效率,因为对每个具有设置焦点if
指令的元素都会调用$watch
。尝试$element并删除$element[0]这里的问题是$watch
不会被触发。所以你的建议不适用于这里。你能创建一个plunker吗?你能在添加控制器的地方提供html代码吗。或者只创建fiddle您可以在hasFocus而不是attributery$element上应用$scope.$watch并删除$element[0]这里的问题是,$watch
不会被触发。所以你的建议不适用于这里。你能创建一个plunker吗?你能在添加控制器的地方提供html代码吗。或者只创建fiddle,您可以在hasFocus而不是attribute上应用$scope.$watch