【发布时间】:2014-11-24 18:35:39
【问题描述】:
我正在使用 UI-Router 加载带有新表单的视图,或编辑现有表单。
新表单的 url 为:#/dashboard/form/someFormType
可编辑表单的 url 为:#/dashboard/form/someFormType/edit/instanceid
路由状态的设置如下所示,抽象状态解析两个子状态使用的条目,然后解析自己的条目。
.state('dashboard.form', {
url: "/form/:formType",
abstract: true,
controller: 'FormController',
controllerAs: 'formCtrl',
templateUrl: '/app/dashboard/views/form.html',
resolve: { ... }
})
.state('dashboard.form.create', {
url: "",
resolve: { ... }
})
.state('dashboard.form.edit', {
url: "/edit/:formPackageInstanceId",
resolve: { ... }
})
如果我开始在dashboard.edit.form 中编辑现有表单,然后决定在中途创建一个新表单并单击具有dashboard.form 的ui-sref 的导航栏。从仪表板创建url 更改。 form.edit 到dashboard.form.create,dashboard.form.create 中的resolves 已经解决了,但是UI 从不刷新,所以表单输入值是我之前编辑的表单的值...
有什么建议吗?
更新
在一些帮助下,我找到了一些记录路由问题的代码:
// Add state change hooks to log issues to console
.run(function($rootScope, $state, $urlMatcherFactory) {
$rootScope.$state = $state;
function message(to, toP, from, fromP) { return from.name + angular.toJson(fromP) + " -> " + to.name + angular.toJson(toP); }
$rootScope.$on("$stateChangeStart", function(evt, to, toP, from, fromP) { console.log("Start: " + message(to, toP, from, fromP)); });
$rootScope.$on("$stateChangeSuccess", function(evt, to, toP, from, fromP) { console.log("Success: " + message(to, toP, from, fromP)); });
$rootScope.$on("$stateChangeError", function(evt, to, toP, from, fromP, err) { console.log("Error: " + message(to, toP, from, fromP), err); });
});
它没有通过任何错误,并记录状态更改的开始和成功完成:
Start: dashboard.form.edit{"formPackageType":"corporation","formPackageInstanceId":"574"} -> dashboard.form.create{"formPackageType":"corporation"}
Success: dashboard.form.edit{"formPackageType":"corporation","formPackageInstanceId":"574"} -> dashboard.form.create{"formPackageType":"corporation"}
【问题讨论】:
-
在使用 UI-Router 调试问题时,我发现为 UI-Router 调度的“$stateChangeError”事件添加侦听器非常有用。查看this documentation页面底部的操作方法。
-
在转换或解决过程中可能出现一些错误。有时在这种情况下不会给出错误消息。您可以尝试@SunilD 之类的
$stateChangeError事件。州。 -
嗨@SunilD。我使用您的建议更新了我的代码,但它似乎没有出现错误,并且解决了,但没有刷新 UI
标签: javascript angularjs angular-ui-router