如何在浏览器后执行某些操作?
问题描述:
我有很大的形式。这种形式适用于真正的旧PC。此表单是某个瘦客户机的一部分。我使用AngularJS来实现SPA和选项卡上的是这种形式。如何在浏览器后执行某些操作?
当我打开我的形式发送一些请求到后端,并得到了一些数据。之后,基于这个答案,AngularJS(由ngIf
和ngShow
指令构建的形式)。
生命周期是: 1)获得的权限,并获得数据 2)呈现一些字段(基于权限)与该数据
有表单上约150字段。那么浏览器呈现大约80-100个组件需要一段时间。嗯,这是不是在这个职位的问题...
我有我的表格上有些玻璃面板。当表单没有准备好时,玻璃窗格必须显示在表单上方。问题是我可以在一些操作上处理玻璃窗格。我这样做:
- 使玻璃板
- 开始数据和权限的API请求
- 获得的数据和权限的API请求回答基于权限
- 禁用玻璃板
- 渲染领域
问题是玻璃窗格被禁用后浏览器呈现字段。
如何禁用玻璃面板后浏览器呈现完毕DOM?
的代码是:
makePermissionsRequest().then(function (permissionsModel) {
$scope.permissionsModel = permissionsModel;
});
答
你可以尝试使用突变观察者做你想要的代码
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);
有些代码可能的帮助。 –
你正在考虑这一切都是错误的。 Angular不直接* **响应**到浏览器中的渲染事件。 Angular使用循环('$ digest')来检查它知道的任何JavaScript属性值是否已更改,并重新呈现DOM。它*听起来像*你想要做的是在页面加载时启用玻璃窗格,并禁用它以响应你的数据(在'.then()'回调函数中)。只是使用'ng-if'或'ng-show'来监视一个布尔值就可以达到这个目的。 – Claies
@Claies Ty为您的答案。在我看来,我真的很糟糕英语:)你完全误解了我。我完全理解$消化循环是什么,并且我明白当我得到回应时,$消化工作,观看ngIf/ngShow指令,然后AngularJS改变。此时浏览器开始渲染dom。我需要以某种方式在此渲染后禁用玻璃窗格。 –