2016-11-29 153 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); 
相關問題