簡體   English   中英

AngularJS $ scope已更新,而不是視圖

[英]AngularJS $scope Updated, Not The View

我看了無數帖子,但還沒有找到與我正在尋找的帖子完全匹配的帖子。 我拆分為多個控制器,以將功能明確划分為多個區域。 有一個集中式服務,其中包含在各個控制器之間傳遞並在屏幕上不同區域顯示的所有數據。 我遇到了一個控制器的問題,該控制器與其他控制器捕獲相同的數據,但是在處理服務中的數據時不會更新UI。 在每個控制器中,我將范圍變量設置為服務中的對象。

$scope.package = SampleService.getPackage();

然后,我使用ng-repeat遍歷該程序包,該程序包包含一個數組,並且可能包含要顯示的嵌套數據數組。 在此過程中,將處理數據並將其分配給這些項目(在服務內,而不是控制器內)。 如果將$ scope.package變量放在循環中,則可以看到該變量正在從服務中更新(在控制台中查看),但更改未反映在屏幕上。 特別是,我將幾個值設置為true / false,並根據它們的值在屏幕上顯示幾個圖標。 直到我單擊屏幕上的某些內容(假設這會觸發摘要循環),圖標才會顯示(尚未檢測到作用域變量沒有更改)。 然后將顯示圖標。 但是,它們會根據任務的狀態進行多次更改。 我必須繼續單擊以更改圖標。

有什么我想念的嗎? 對結構的更改可以在頁面的另一個區域完美地工作。 這是我無法正常工作的領域。 唯一的區別是,我是在切換true / false,而不是操縱對象的其他區域。 可以使用angular.copy設置true / false值嗎?

我有點不知所措。

有什么建議嗎?

我敢肯定會有更好的答案,但是要嘗試的一件事是將服務執行包裝在$ timeout中,以強制摘要。

$timeout(function() {
    $scope.package = SampleService.getPackage();
});

聽起來答案似乎是觸發$digest循環: http//www.sitepoint.com/understanding-angulars-apply-digest/

這將在您的控制器中產生以下代碼:

$scope.$apply(function () {
    $scope.package = SampleService.getPackage();
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM