문제 설명
$ionicHistory.backView() stateParams 변경 후 돌아가기 (Going back after changing stateParams of $ionicHistory.backView())
Ionic Framework를 사용하여 Android 앱을 개발 중입니다.
그 안에 view1, view2 및 view3
의 세 가지 보기가 있습니다.
탐색 view1 ‑> 보기2 ‑> view3
view3
에서 view2
로 다시 이동할 때 stateParam param1
값을 변경해야 합니다. view2
일부 작업을 수행합니다. 아래 코드는 view3
view2
의 stateParam 값을 변경하고 있음을 보여줍니다. 다음은 Android의 작업을 재정의하는 코드입니다. 기기 뒤로가기 버튼
$ionicPlatform.registerBackButtonAction(function() {
if ($state.current.name == "view3") {
$ionicHistory.backView().stateParams = {param1:true};
$ionicHistory.goBack(); // moves to view2
} else {
$ionicHistory.goBack();
}
}, 100);
view2
로 다시 이동한 후, 지금 뒤로 버튼을 클릭하면 view1
이 아닌 view3
으로 이동합니다. 이제 뒤로 버튼을 클릭하여 view3
및 view2
만 볼 수 있습니다. view1
로 전혀 이동하지 않습니다.
view2
의 stateParam 값을 변경한 후에도 view2
에서 view1
로 이동하는 뒤로 버튼을 만드는 방법은 무엇입니까?
참조 솔루션
방법 1:
I've finally found a solution to that issue, unfortuately, it's a hack so it's a little bit ugly.
The tip is to not only update stateParams, but also stateId.
Please see bellow a re‑usable answer :
var params = {param1:true};
var backView = $ionicHistory.backView();
var stateId = backView.stateName;
for (var key in params) {
if (params[key] && params[key] !== "") {
stateId += "_" + key + "=" + params[key];
}
}
backView.stateParams = params;
backView.stateId = stateId;
$ionicHistory.goBack();
In your specific case, it could just be:
if ($state.current.name == "view3") {
var backView = $ionicHistory.backView();
backView.stateParams = {param1:true};
backView.stateId = backView.stateName + "_param1=true";
$ionicHistory.goBack(); // moves to view2
} else {
$ionicHistory.goBack();
}
방법 2:
I met the same issue,but my view2 is root,so I disabled the back when view3 back to view2,thus made back view3 disappear
$ionicHistory.backView().stateParams = resultObject;
$ionicHistory.nextViewOptions({ disableBack: true });//this can
$ionicHistory.goBack();
with this my code runs well,and for your destination,you can add a backview in view2.onenter() manually
(by Selva、Sébastien BATEZAT、One Double)