2016-11-29 64 views
0

我有很大的形式。这种形式适用于真正的旧PC。此表单是某个瘦客户机的一部分。我使用AngularJS来实现SPA和选项卡上的是这种形式。如何在浏览器后执行某些操作?

当我打开我的形式发送一些请求到后端,并得到了一些数据。之后,基于这个答案,AngularJS(由ngIfngShow指令构建的形式)。

生命周期是: 1)获得的权限,并获得数据 2)呈现一些字段(基于权限)与该数据

有表单上约150字段。那么浏览器呈现大约80-100个组件需要一段时间。嗯,这是不是在这个职位的问题...

我有我的表格上有些玻璃面板。当表单没有准备好时,玻璃窗格必须显示在表单上方。问题是我可以在一些操作上处理玻璃窗格。我这样做:

  1. 使玻璃板
  2. 开始数据和权限的API请求
  3. 获得的数据和权限的API请求回答基于权限
  4. 禁用玻璃板
  5. 渲染领域

问题是玻璃窗格被禁用后浏览器呈现字段。

如何禁用玻璃面板后浏览器呈现完毕DOM?

的代码是:

makePermissionsRequest().then(function (permissionsModel) { 
    $scope.permissionsModel = permissionsModel; 
}); 
+1

有些代码可能的帮助。 –

+0

你正在考虑这一切都是错误的。 Angular不直接* **响应**到浏览器中的渲染事件。 Angular使用循环('$ digest')来检查它知道的任何JavaScript属性值是否已更改,并重新呈现DOM。它*听起来像*你想要做的是在页面加载时启用玻璃窗格,并禁用它以响应你的数据(在'.then()'回调函数中)。只是使用'ng-if'或'ng-show'来监视一个布尔值就可以达到这个目的。 – Claies

+0

@Claies Ty为您的答案。在我看来,我真的很糟糕英语:)你完全误解了我。我完全理解$消化循环是什么,并且我明白当我得到回应时,$消化工作,观看ngIf/ngShow指令,然后AngularJS改变。此时浏览器开始渲染dom。我需要以某种方式在此渲染后禁用玻璃窗格。 –

回答

0

你可以尝试使用突变观察者做你想要的代码

var observer = new MutationObserver(function(mutations) { 
    mutations.forEach(function(mutation) { 
    // disable the glass pane because the form was mutated 
    });  
}); 

// configuration of the observer: 
var config = { attributes: true, childList: true, characterData: true }; 

var target = ... // angular.element("yourform") would give you the form node 

// pass in the target node, as well as the observer options 
observer.observe(target, config); 
相关问题