Angularjs 将焦点设置为ng单击内的角度元素
我想将值从Angularjs 将焦点设置为ng单击内的角度元素,angularjs,Angularjs,我想将值从vm.foo复制到vm.bar(有效),然后将焦点设置为vm.bar(无效) 为什么angular.element('#bar').focus()在这种情况下不起作用?我发现了这个问题 因此,在我们的情况下,这将是 <button ng-click="vm.baa=vm.foo; angular.element(document.querySelector('#bar')).focus();"></button> 在控制器中 vm.setFocus = f
vm.foo
复制到vm.bar
(有效),然后将焦点设置为vm.bar
(无效)
为什么angular.element('#bar').focus()在这种情况下不起作用?我发现了这个问题
因此,在我们的情况下,这将是
<button ng-click="vm.baa=vm.foo; angular.element(document.querySelector('#bar')).focus();"></button>
在控制器中
vm.setFocus = function() {
angular.element(document.querySelector('#bar'));
}
vm.changeFocus = () => {
$scope.$broadcast('myFocusEvent');
};
使用自定义指令发出事件
app.directive('focusOn', () => {
return (scope, elem, attr) => {
scope.$on(attr.focusOn, (e) => {
elem[0].focus();
});
};
});
用法:
<input type="text" ng-model="vm.foo">
<button ng-click="vm.baa=vm.foo; vm.changeFocus();"></button>
<input type="text" ng-model="vm.bar" focus-on="myFocusEvent">
请注意,我使用的是箭头函数而不是命名函数
我不知道angular.element('#bar')
是访问DOM元素的可行方法。你确定angular.element
可以访问id为bar
的元素吗?@JarekKulikowski如果jQuery在angularjs之前加载,那么是的,在这种情况下可能会将angular.element
替换为$
就可以了。只要你的angular控制器中有它,它就可以正常工作,但是把它放进html页面,它就不再工作了。(还有$gives error,我不使用jquery)像这样的东西属于一个方向对不起,根本没有效果。我发现我需要使用setTimeout
来做focus
,否则它对我也不起作用;我认为这必须在控制器中完成。我认为你可能是对的,我会再尝试几次。
<input type="text" ng-model="vm.foo">
<button ng-click="vm.baa=vm.foo; vm.changeFocus();"></button>
<input type="text" ng-model="vm.bar" focus-on="myFocusEvent">
vm.changeFocus = () => {
$scope.$broadcast('myFocusEvent');
};