「えー?マジ$scope
!?」「$scope
が許されるのはv1.1までだよね!」
モダンAngularJSのお作法的に$scope
や$rootScope
は仕様を控えるべき、だそうです。
popPage後に元ページをリロードさせる際、$scope.$emit
や$scope.$broadcast
は使えないということですね。
解決法1
popPageのrefreshをtrueに設定する。
replacePageと同じくこれは元のページ全体を再読込みする。
var page = nav.getCurrentPage();
// 前の画面に戻る
function back() {
var options = {
animation : "slide",
refresh : true
};
nav.popPage(options);
}
一瞬でツールバーごと消えるのが玉にキズ。
ons-splitter-contentの部分だけリロードしたい場合は向かないかと。
解決法2
pushPage時にリロード用のメソッドも一緒に送る。
遷移後ページのpopPageのonTransitionEndで元ページのリロードメソッドを呼ぶ。
まずは遷移元画面のJavaScript。
読み込み処理をpushPageの引数optionにreloadという名前で登録。
// 詳細表示
function showDetail(data) {
var options = {
animation : "slide",
reload : function() {
load();
}
};
nav.pushPage('detail.html', options);
}
// 読み込み
function load() {
/* データを読み込む処理 */
}
こちらは遷移先画面のJavaScript。
onTransitionEnd(2.0RC以降はcallback)で元画面から渡されたreloadを呼んでいます。
//var args = nav.topPage.pushedOptions; // 2.0RC以降
var args = nav.getCurrentPage().options;
// 前の画面に戻る
function back() {
var options = {
animation : "slide",
// callback : function() { // 2.0RC以降
onTransitionEnd : function() {
args.reload();
}
};
nav.popPage(options);
}
結論
簡単なのはrefresh:true
に設定してpopPageを呼ぶ方法。
部分的にリロードをかける場合はonTransitionEnd(現在はcallback)を駆使するのが良いっぽいです。