在Angularjs承诺完成之前,我可以阻止浏览器UI线程吗?

时间:2016-01-04 13:41:05

标签: javascript angularjs multithreading

我有一个带有多个输入框的表单的计时问题。默认情况下禁用某些输入框。 当用户按下TAB键以聚焦下一个输入框时,我想要一个阻止UI线程的承诺,直到它被解析/拒绝为止。 这是因为下一个输入框的焦点状态(启用/禁用)取决于前一个输入框中http请求的结果。 如果用户快速键入并按下TAB键,焦点将被设置为链接下方已经启用的输入框而不是下一个。

在$ http请求中使用promise,当响应到达时,逻辑将决定是否应该启用下一个输入框。

每个输入框都使用ng-blur来检测焦点丢失。输入框的指令也跟踪搜索承诺,我可以在指令内的blur方法中访问它。

可以吗?

2 个答案:

答案 0 :(得分:1)

我能提供的最好的是标准ng-cloack。在准备就绪之前,你将避免展示它们。

https://docs.angularjs.org/api/ng/directive/ngCloak

另一个选择是你用“旋转器”之类的东西“手动”管理事物的显示,或者只是通过隐藏控件直到“准备就绪”为止。

答案 1 :(得分:1)

您不应该阻止整个UI。同步AJAX请求可以执行您想要的操作,但it has been deprecated

您可以阻止(禁用/只读)在请求挂起时需要验证的输入字段。除灰色区域外,您应该显示一些指示,以便用户了解有待处理的操作。