Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 将焦点设置为ng单击内的角度元素_Angularjs - Fatal编程技术网

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');
};