在视图中,我有一个链接可以选择如下所示的起始位置:
<a href="#/location/start"><input type="text" ng-model="placeStart" placeholder="place to start"></a>
<input type="text" ng-model="weight" placeholder="goods weight">
&#13;
并且在位置页面中,我确实选择了一个地方,但是,当我使用$ ionicHistory.goBack()时,我无法通过&#34;地点&#34;回到上一个视图。我也不想使用state.go(&#39;以前的视图&#39;)来传递&#34; place&#34;,因为这样,我将丢失上一个视图中的其他输入信息。
答案 0 :(得分:2)
这是:
$ionicHistory.backView().stateId;
请勿忽略在控制器上包含$ionicHistory
答案 1 :(得分:0)
有三种选择立即浮现在脑海中。 $ rootScope,localStorage和使用路由而不是goBack()。
如果您需要另一个视图中的值,并且它们是完全独立的控制器等,那么您需要一种方法来传递它们。
您可以创建然后将值放入$ rootScope.globals或类似的内容。
您可以在将用户重新发送之前将值存储到localStorage。
您可以正确地重定向到允许值包含在网址中并仍显示该页面的路由。例如,设置和不设置值的相同路由,使用 - 或0表示未设置,具体取决于数据类型:
/an/example/route/-/-/
/an/example/route/0/0/
/an/example/route/123/456
<强>更新强>
实际上有第四种方法可以使用$ broadcast和$ on在控制器之间发送数据。广播发生在发送控制器和接收控制器中的$ on侦听中,因此您可以向值/对象等发送更新。$on and $broadcast in angular
答案 2 :(得分:0)
这取决于您的情况,但是如果您在localStorage
页面重新加载后不关心保留状态,而是在您正在进行时记住该状态返回(并不一定当你以后再向前导航回到视图中)然后我这样做:我做了一个单独的服务,只是一个坚持的对象,我可以在任何地方注入并存储一些变量。在Angular 1中,这将是一个服务对象。
angular.module('foo').factory("placeHelper", [
() => {
let _place = null;
class PlaceHelper {
set place(place){
_place = place;
}
get place(){
return _place;
}
reset(){
_place = null;
}
}
let helper = new PlaceHelper();
return helper;
}
]);
然后在您要回到的控制器中,您注入placeHelper并询问该地点并通过$scope.place = placeHelper.place
恢复您的状态,并且当在该控制器的UI中有人选择一个地点时,您只需将其存储在服务中placeHelper.place = $scope.place
。
如果我想在页面刷新后保持状态,我会在服务中使用localStorage。
我不喜欢污染$ rootScope,因为在你开始拥有多个不相关的方法之后很难跟踪,你的属性需要更长的名字(或者在对象中分组)无论如何)。对于可封装和分离问题的可维护性更好。
服务差异 该服务可以是对象文字而不是类,如果您希望它更简单,您可以直接设置属性而不是使用方法。
angular.module('foo').factory("placeHelper", [
() => {
let helper = {
place: null,
reset(){
this.place = null;
}
};
return helper;
}
]);
答案 3 :(得分:0)
我最近偶然发现了同样的问题。我最终决定使用$ ionicHistory.currentView()和$ ionicHistory.backView()(参见文档here)。前一个函数返回一个与当前视图关联的对象,而后一个函数返回一个与您在调用$ ionicHistory.goBack()之后将转到的视图相关联的对象。
在您的位置页面上调用$ ionicHistory.goBack()之前,您调用$ ionicHistory.backView()并为返回的对象定义一个新属性,其内容是您要传播到另一个视图的数据。
在另一种观点中,您更改了其“离子视图”中心&#39;事件处理程序,因此它调用$ ionicHistory.currentView(),它使用您想要的数据检索对象。