私はやや古いイオン性の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。
いくつかのHTMLを提供できますか?スクリプトにはいくつかの間違いがありますが、それは私たちにアイデアを見せてくれるものだと思っていますが、$のために ")"がありません。そしておそらく "更新された値"もパラメタです。あなたが問題なく働いているかどうかを確かめるためには、$ applyがなくてもうまくいくはずですから。 – MrWook
@Carsten - 遅れて申し訳ありません。はい、上記の例では、コード内ではなく、ブラケットがありません。関連HTMLは '下回っている<スパンのスタイル= "フォントサイズ:11px;"> は乗る必要があります:{{gt_countH.needRideCount}} 持っライド:{{gt_countH.haveRideCount}} オープンスポット:{{ gt_countH.availablePoolCapacity}} $のスコープ変数は '$ scope.gt_countH = <値を持つハッシュを返す関数呼び出し>以下のように設定されているコントローラで ' ' は、自分の考えをありがとう –
申し訳コード上記のコメントに書式設定が正しく表示されていないようです –