如何使用ion中的参数返回上一个视图?

时间:2015-08-05 01:28:52

标签: angularjs ionic

在视图中,我有一个链接可以选择如下所示的起始位置:



<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;
&#13;
&#13;

并且在位置页面中,我确实选择了一个地方,但是,当我使用$ ionicHistory.goBack()时,我无法通过&#34;地点&#34;回到上一个视图。我也不想使用state.go(&#39;以前的视图&#39;)来传递&#34; place&#34;,因为这样,我将丢失上一个视图中的其他输入信息。

4 个答案:

答案 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(),它使用您想要的数据检索对象。