假设我们在$ stateProvider中定义了父子关系,如下所示:
.state('myProfile', {
url: "/my/profile",
templateUrl: 'my/profile.html',
controller: 'MyProfileController'
}).state('myProfile.edit', {
url: "/edit",
templateUrl: 'my/profile.edit.html',
controller: 'EditMyProfileController'
});
这里的想法是父myProfile
状态是不可编辑的,但子myProfile.edit
状态是编辑配置文件的实际形式。让我们忽略,如果这是个人资料页面的工作方式 - 我只是在玩弄东西和学习。
当用户提交表单时,我使用$ state对象返回父页面:
$scope.save = function() {
userResource.update($scope.user, function() {
SessionService.refresh();
$state.go('myProfile'); // also tried with reload: true as well
});
}
用户保存配置文件数据后 - 正确保存 - 除非我按F5并刷新浏览器,否则父视图不会更新。
我注意到的一件事是,如果我将孩子myProfile.edit
状态变成父本身而不是myProfile
状态的孩子,这个问题实际上会消失,事情就像预期的那样(尽管如此) ,布局看起来很糟糕。)
似乎UI路由器可能正在缓存父级的结果,不知道模型中的内容已发生变化,是否需要重新运行控制器?
如果仍然让父myProfile
页面始终执行其控制器以重新加载其数据,我如何保持我的父子关系?基本上,我希望每当使用$state
或点击指向myProfile
的链接时都会发生这种情况。我怎么能这样做?
如果我不能按照我要求做的话,那么我知道我可以设置一堆子状态并使它们按预期工作...但是,如何为父设置默认子状态?例如,假设我希望myProfile.edit
成为myProfile
的默认子状态 - 我该怎么做?
谢谢!
答案 0 :(得分:35)
要在从子状态导航到他时强制父状态重新加载,您可以使用以下两种方式。纯粹的js或指令属性。
<a ui-sref="myProfile" ui-sref-opts="{ reload: true }">Back to My Profile</a>
或
$state.go('myProfile', null, { reload: true });
答案 1 :(得分:3)
您是否尝试过收听&#34; $ stateChangeStart&#34;事件和/或使用$ state.reload()?
答案 2 :(得分:2)
好像$ state.go上有一个错误,它会遗漏重新加载选项。 $ state.transition然而对我有用。
$state.transitionTo('state',null,{reload: true});