ui-router - 如何在刷新时不使用 $stateParams 加载 url?

ui-router - How to load url without $stateParams on refresh?

我过于简化的 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 link 和 "/newCategories" 加载它的 url: "/categories/new"

<a ui-sref="/newCategories">New Category</a>

但是,当我刷新时,它认为“/new”是 $stateParams 的一部分。因此它使用不同的控制器并尝试解析其模板(缺少模板,因此会出错)。

现在我通过将 url 从“/categories/new”更改为“/categories-new”来修复它,这样刷新时就不会混淆了。 但是我该如何以不同的方式解决这个问题?(也许 ui-router 有一些处理它的方法)

如果我没理解错的话,你想调用不同的控制器a.e。 newCategoriesCtrl 当用户调用 /categories/:addressaddress 参数是 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: {
   //...
  }
});