【发布时间】:2014-02-20 20:03:34
【问题描述】:
假设我们在 $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 Router 可能正在缓存父级的结果,不知道模型中的事情发生了变化并且需要重新运行控制器?
如何保持父子关系,同时仍然让父 myProfile 页面始终执行其控制器以重新加载其数据?基本上,我希望在使用$state 或单击指向myProfile 的链接时发生这种情况。我该怎么做?
如果我不能按照我的要求做,那么我知道我可以设置一堆子状态并让它们按预期工作......但是,我如何为父级设置默认子状态?例如,假设我希望 myProfile.edit 成为 myProfile 的默认子状态 - 我该怎么做?
谢谢!
【问题讨论】:
标签: javascript angularjs state angular-ui angular-ui-router