【问题标题】:ui-router - How to load url without $stateParams on refresh?ui-router - 如何在没有 $stateParams 的情况下在刷新时加载 url?
【发布时间】:2017-09-29 19:16:44
【问题描述】:

我过于简化的 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);
  }
}
});

有了这个,我可以使用带有“/newCategories”的ui-serf链接来加载它的url:“/categories/new”

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

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

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

【问题讨论】:

    标签: angularjs angular-ui-router


    【解决方案1】:

    如果我理解正确,您想调用不同的控制器 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: {
       //...
      }
    }); 
    

    【讨论】:

    • 是否有可能以某种方式检查保留链接(如“新”或“编辑”)并相应地更改控制器?或者这是一种不好的做法?
    • @AlekseySolovey 好吧,每个州都有自己的控制器。我确定您不想创建嵌套控制器 :)
    猜你喜欢
    • 2014-01-01
    • 2016-01-08
    • 2020-03-13
    • 1970-01-01
    • 2023-03-08
    • 2020-10-09
    • 2016-04-28
    • 2018-06-04
    相关资源
    最近更新 更多