2017-07-13 35 views
0

我使用rest api從一個sharepoint組中獲取用戶,並且如果當前用戶在該特定組中存在,窗體(視圖)必須有一些額外的選項和按鈕可見。因此,我使用$ watch來檢測分配給rest api返回值的變量的變化,並在$ watch回調中定義視圖中的變化。現在當Rest api返回$ watch函數時觸發,但視圖仍然沒有更新。

如果我執行,

angular.element('[ng-controller=controllerName]').scope().$apply(); 
控制檯

,那麼我的形式加載罰款。

+0

使用範圍$適用於手錶... –

+0

我認爲該頁面在$ watch回調之前呈現。 –

+0

在setTimeOut中嘗試$ apply()。 (請注意,setTimeOut不在此範圍之內。) –

回答

0

如果您使用Angular的$ http服務進行請求,它將自動處理更新視圖。如果您在沒有它的情況下提出請求,則需要告知Angular數據已更改。

雖然你可以使用手錶,它不是最好的方式來實現這一點。我建議使用$ http。如果你不能,只需在響應函數中調用$ timeout()。

而且,有關本: angular.element('[ng-controller=controllerName]').scope().$apply();

如果你在你的控制器內調用這一點,你可以簡單地調用範圍$適用(),無需訪問DOM。儘管如此,這條線意味着您的整體方法存在問題。

+0

我正在使用$ q的angularjs來解決異步問題。但問題在於其餘的調用和檢查用戶是否在頁面加載時同時發生條件。所以有時甚至在諾言解決之前,正確的If條件變成假,並且它轉到其他條件,並且根據這個其他條件呈現頁面!所以我使用$ watch來進行變量更改,並且它會觸發,所以正確的if條件會執行,但是頁面在$ watch回調之前呈現並且它是空的。當我按下F12並在控制檯中執行$ apply時,頁面加載正常。即使$ watch回調中的$ apply也不起作用。 –