ui-router - 如何在刷新时加载没有$ stateParams的url?

时间:2017-09-29 10:38:01

标签: angularjs angular-ui-router

我过度简化的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有一些处理它的方法)

1 个答案:

答案 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: {
   //...
  }
});