4

在当前版本中,当我从状态“a”到状态“b”然后回到“a”时,“a”的模板被重新绘制,而不是恢复模板。结果是,一旦我离开“a”,模板“a”中的用户数据就会丢失。

(问题也存在于 Angular 的内置路由服务中)。

现在,这将是我不想拥有 ui-router 的唯一原因(其他一切都很棒),因为这种行为不适合我们最重要的用例之一。同样对我个人而言,这似乎不是最合乎逻辑的行为。

我想知道是否有办法使用内置的东西来实现这一点。

(在对源代码进行了几次修改后,我能够得到这种行为。)

4

2 回答 2

1

如果您的应用程序正在跨视图跟踪状态,我知道您有两种方法可以跨视图更改保留数据。

  1. ng-view一种是在or的父作用域上定义视图状态ui-view。此范围可以是$rootScope导航发生时不变的范围,也可以是不更改的范围。例如,如果您定义类似$rootScope.user={};. 在您注入 $rootScope 的任何地方,您都会获得可以更新的用户对象。

  2. 其次是使用服务来跟踪正在工作的模型的状态。例如,如果您正在创建用户。UserCreateWuzard您可以使用 method\property创建服务,例如userToCreate. 您的控制器将依赖此服务来跨视图获取和更新活动用户。由于服务本质上是单例的,因此您不会在视图中丢失任何数据。

于 2013-10-09T09:08:33.273 回答
0

我也有类似的需要保留模板。经过一番搜索,我终于遇到了这个插件:UI Router Extras: Sticky State

添加库后,您需要更新路线:

$stateProvider.state('billing', {
    sticky: true,
    views: {
        'billing' : {
            templateUrl: 'billing.html',
            controller: 'BillingController'
        }
    }
});

您还需要为需要保留的视图/模板添加一个容器

<main ui-view></main>
<div ui-view="billing" ng-show="$state.current.name==='billing'"></div>
于 2016-09-20T22:09:00.170 回答