在当前版本中,当我从状态“a”到状态“b”然后回到“a”时,“a”的模板被重新绘制,而不是恢复模板。结果是,一旦我离开“a”,模板“a”中的用户数据就会丢失。
(问题也存在于 Angular 的内置路由服务中)。
现在,这将是我不想拥有 ui-router 的唯一原因(其他一切都很棒),因为这种行为不适合我们最重要的用例之一。同样对我个人而言,这似乎不是最合乎逻辑的行为。
我想知道是否有办法使用内置的东西来实现这一点。
(在对源代码进行了几次修改后,我能够得到这种行为。)
在当前版本中,当我从状态“a”到状态“b”然后回到“a”时,“a”的模板被重新绘制,而不是恢复模板。结果是,一旦我离开“a”,模板“a”中的用户数据就会丢失。
(问题也存在于 Angular 的内置路由服务中)。
现在,这将是我不想拥有 ui-router 的唯一原因(其他一切都很棒),因为这种行为不适合我们最重要的用例之一。同样对我个人而言,这似乎不是最合乎逻辑的行为。
我想知道是否有办法使用内置的东西来实现这一点。
(在对源代码进行了几次修改后,我能够得到这种行为。)
如果您的应用程序正在跨视图跟踪状态,我知道您有两种方法可以跨视图更改保留数据。
ng-view
一种是在or的父作用域上定义视图状态ui-view
。此范围可以是$rootScope
导航发生时不变的范围,也可以是不更改的范围。例如,如果您定义类似$rootScope.user={};
. 在您注入 $rootScope 的任何地方,您都会获得可以更新的用户对象。
其次是使用服务来跟踪正在工作的模型的状态。例如,如果您正在创建用户。UserCreateWuzard
您可以使用 method\property创建服务,例如userToCreate
. 您的控制器将依赖此服务来跨视图获取和更新活动用户。由于服务本质上是单例的,因此您不会在视图中丢失任何数据。
我也有类似的需要保留模板。经过一番搜索,我终于遇到了这个插件: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>