我过度简化的app.config()包含:
$stateProvider.
state("/", {
url: "/",
templateUrl: "main.html"
}).
state("/newCategories", {
url: "/categories/new",
templateUrl: "/views/new_categories.html",
controller: "newCategoriesCtrl"
}).
state("/categoryPages", {
url: "/categories/:address",
templateUrl: "/views/categories.html",
controller: "categoriesCtrl",
resolve: {
categoriesDataResolve: function resolveTemplate($stateParams, DataResolver) {
return DataResolver.resolveTemplates($stateParams.address);
}
}
});
有了这个,我可以使用 ui-serf 链接" / newCategories"加载其网址:" / categories / new"
<a ui-sref="/newCategories">New Category</a>
然而,当我刷新时,它认为&#34; / new&#34;是$ stateParams的一部分。因此,它使用不同的控制器并尝试解析其模板(缺少,因此它给出了错误)。
现在我通过更改&#34; / categories / new&#34;中的网址来修复它。到&#34; / categories-new&#34;所以它不会在刷新时感到困惑。 但我如何以不同的方式解决这个问题呢?(也许ui-router有一些处理它的方法)
答案 0 :(得分:1)
如果我理解你的话,你想打电话给不同的控制器a.e.当用户致电newCategoriesCtrl
/categories/:address
param为address
时,new
将/categories/new
更改为"/categories-new
是解决问题的正确方法。
小提示:使用/
作为州名的前缀是不好的做法。它会使开发人员感到困惑,并且可以与原始URL混合使用。
$stateProvider.
//...
state("newCategories", {
url: "/categories-new",
templateUrl: "/views/new_categories.html",
controller: "newCategoriesCtrl"
}).
state("categoryPages", {
url: "/categories/:address",
templateUrl: "/views/categories.html",
controller: "categoriesCtrl",
resolve: {
//...
}
});