2017-08-30 64 views
0

我有一些舊的離子App(離子v 1.3.x)。根據在App的另一部分中檢測到的某些異步更改,它會發出$ rootScope級別事件。我在控制器中捕獲該事件以更新該事件被捕獲時的視圖。沿着下面的行。

// In a different part of the App an asynchronous event is caught 
$rootScope.$emit("some:change:event", grpKey); // from asynchronous event 

// In Controller 
$rootScope.$on("some:change:event", function(event, param){ 
    reComputeValues(param); 
} 

function reComputeValues(param){ 
    $scope.someVariable = updated value; 
    //$scope.$apply(); 
} 

function reComputeValues_withApply(param){ 
    $scope.$apply(function(){ 
     $scope.someVariable = updated value; 
    }); 
} 

即使$ scope.someVariable被更新(我可以看到它通過它在調試器步進時),當我在視圖中的更改不會反映在視圖中。如果我離開那個視圖並回到視圖,那麼頁面將重新加載並且更改就在那裏。

在挖掘它之後,首先看起來是$ apply調用應該做的。我這樣做了兩種不同的方式(只需調用$ scope。$在$ apply調用中應用或封裝變量更新)。雖然這確實更新了視圖,但它提供了一些似乎與某個範圍問題有關的錯誤。我意識到這可能是因爲當事件被捕獲並且函數被調用時它在$ rootScope的上下文中並且變量在$ scope級別更新,這就是爲什麼當強制$時它不會自動更新視圖並給出錯誤應用電話。但是$ scope也是$ rootScope的一個子元素,所以我不完全理解$ rootScope和$ scope這裏的交互以及視圖沒有更新的原因。

欣賞關於如何最好地解決此問題的任何指示。

謝謝, Sanjay。

+0

你能爲我們提供一些html嗎?在腳本中有一些錯誤,但我認爲這是因爲它只是爲了向我們展示這個想法,但是缺少一個用於$的「)」。也許「更新的價值」太參數。只是爲了確保你的問題的工作將是完美的,因爲它應該像沒有$應用那樣工作。 – MrWook

+0

@Carsten - 對不起,延遲。是的,缺少的括號就在上面的例子中 - 而不是代碼中。有關HTML低於 '的 需要騎:{{gt_countH.needRideCount}}    有無路線:{{gt_countH.haveRideCount}}    打開景點:{{ gt_countH.availablePoolCapacity}} ' 在控制器的$範圍變量設置如下 '$ scope.gt_countH = <返回與值哈希函數調用>' 感謝您的想法 –

+0

對不起代碼格式似乎沒有出現在上面的評論 –

回答

0

你可以嘗試下面的改變代碼,讓我知道。

$rootScope.$emit("some:change:event", grpKey); // from asynchronous event 

// In Controller 
$rootScope.$on("some:change:event", function(event, param){ 
    $rootScope.$apply(function(){ 
     reComputeValues(param); 
    }); 
} 

function reComputeValues(param){ 
    $scope.someVariable = updated value; 
    //$scope.$apply(); 
} 

function reComputeValues_withApply(param){ 
    $scope.$apply(function(){ 
     $scope.someVariable = updated value; 
    }); 
} 
+0

謝謝你的想法。我試過了,並在$ rootScope級別得到類似的錯誤。下面的錯誤代碼片段。 'angular.js:13920錯誤:[$ rootScope:inprog] http://errors.angularjs.org/1.5.8/$rootScope/inprog?p0=%24apply at angular.js:38 at n( angular.js:18042) at m。$ apply(angular.js:17780)' –

相關問題