angularjs:将焦点集中在指令中之前隐藏的输入元素中

前端之家收集整理的这篇文章主要介绍了angularjs:将焦点集中在指令中之前隐藏的输入元素中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Here is a simplified plunk to illustrate the problem

我有一个角度指令,在可视化之前编译一些HTML代码.在html中,只有在scope.isEditShown为true时,才会显示一个隐藏输入:

< input ng-show ='isEditShown'type ='text'value ='{{content.name}}'class ='title_edit'/>

调用scope.titleChange函数时,将显示该输入.此函数(绑定到ng-dblclick指令)只将true设置为scope.isEditShown,并尝试在输入元素上调用jQuery的focus()方法(以前存储在使用scope.input = $(“input)的链接函数的作用域中:文字“,ae);:

scope.isEditShown = true;
scope.input.focus();

简而言之,我想在双击事件时可视化以前隐藏的输入,并立即给予关注.需要立即关注,因为输入在丢失焦点时被隐藏(我希望用户立即能够编辑输入内容,当用户点击时,输入被隐藏).

问题在于,我似乎无法以编程方式给予输入元素的重点.
经过实验,我发现当scope.isEditShown = true;被执行,输入不可见(=角度js不显示在DOM中),并使用scope.input.focus()设置焦点;一个隐藏的输入什么都不做.当输入元素最终显示出来时,它就没有集中.

什么是有角度的方式来做我想要的?什么时候可以确定我的输入显示,什么时候可以有效地调用focus()?注意:如果我在使用范围$apply()之前给出焦点的输入,我将获得$apply已经在进行中的异常.如果我做一个安全的申请,foucus不会被给予.见the plunkr.

(ps:我真的想明白,所以我不会使用自动对我做的配对libreries)

当您对某些数据绑定变量进行更改时,您需要等待相应的渲染发生,您需要使用着名的setTimeout 0(或者以$timeout服务方式).

这是一个plunkr,显示如何做到这一点.

http://plnkr.co/edit/N9P7XHzQqJbQsnqNHDLm?p=preview

原文链接:https://www.f2er.com/angularjs/142554.html

猜你在找的Angularjs相关文章