2017-08-30 36 views
0

私はやや古いイオン性のApp(ionic v 1.3.x)を持っています。 Appの別の部分で検出された特定の非同期変更に基づいて、$ rootScopeレベルのイベントが発生します。コントローラーでそのイベントを捕まえて、そのイベントが捕捉されたときにビューを更新します。下の行に何かがあります。 $ scope.someVariableが更新されているにもかかわらず

// 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; 
    }); 
} 

(デバッガでそれをステップ実行するとき、私はそれを見ることができます)私はビューの午前たときに、変更がビューに反映されていません。そのビューから離れてビューに戻ると、ページがリロードされ、変更がそこにあります。

まず、$ applyコールがそのトリックを行うべきであるように見えた。上記のように2つの異なる方法($ scopeを呼び出すだけで、$ apply呼び出し内で変数の更新を適用またはカプセル化する)を行いました。これはビューを更新しますが、いくつかのスコープの問題に関連しているようないくつかのエラーがあります。イベントがキャプチャされ、関数が呼び出され、$ rootScopeのコンテキスト内にあり、$スコープレベルで変数が更新され、$を強制するときにビューが自動的に更新されず、エラーが発生しないためです電話をかける。しかし、$ scopeは$ rootScopeの子でもありますので、$ rootScopeと$ scopeのここでの対話とそのビューが更新されていない理由を完全に理解していません。

この問題にどのように対処するのが良いかを指摘してください。

ありがとう、 Sanjay。

+0

いくつかのHTMLを提供できますか?スクリプトにはいくつかの間違いがありますが、それは私たちにアイデアを見せてくれるものだと思っていますが、$のために ")"がありません。そしておそらく "更新された値"もパラメタです。あなたが問題なく働いているかどうかを確かめるためには、$ applyがなくてもうまくいくはずですから。 – MrWook

+0

@Carsten - 遅れて申し訳ありません。はい、上記の例では、コード内ではなく、ブラケットがありません。関連HTMLは '下回っている<スパンのスタイル= "フォントサイズ:11px;"> は乗る必要があります:{{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 n angular.js:18042) at m。$ apply(angular.js:17780) ' –

関連する問題