AngularJS-路由器UI-定义通配符父级状态

AngularJS - Router UI - Defining a wildcard parented state

本文关键字:状态 通配符 定义 路由器 UI- AngularJS-      更新时间:2023-09-26

Fellas,Fellaaas。我是用手机写信的,所以请原谅我有任何误导或不清楚的地方。在我的应用程序中,有一个状态可以从任何其他父状态继承,称为"deals/:dealId:"。到目前为止,我必须为任何其他可用的父状态反复定义相同的状态,这样才能从应用程序上的任何URL访问它。例如:父状态"dashboard"有一个子状态"parent.dashboard.teals",还有另一个状态——"parent.looking.deals",依此类推。在谷歌上搜索解决方案时,我在plunkr上找到了一个使用父状态变量定义创建通配符状态环境的示例:.state(currentState+".teals")。"天啊,天啊",我心想。这正是我所需要的。嗯,不是。我在一个静态的"currentState"变量上测试了它,它运行得很好,我只想在父状态切换之间动态地更改currentState变量。看起来,当angular在加载时第一次生成路由时,它将默认的"currentState"var作为字符串,并将该状态定义为static。因此,即使我在路由更改之间更改默认的"currentState"var,该状态也只能用于第一个生成的状态定义。非常感谢。

我在GitHub上发布了一个功能请求,以防我是第一个需要这个场景的人,或者同时没有合适的解决方案:github.com/angular-ui/ui-router/issues/1014

无论如何,我通过循环遍历父状态并将静态子状态附加到它们上来解决这个问题,而不是手动定义它们:

  angular.forEach(states, function(stateOptions,stateName) {
 $stateProvider.state(stateName, stateOptions.options);
 if (stateOptions.defaultState){
  var dealStateName = stateName+'.deals';
  console.log(dealStateName);
    $stateProvider.state(dealStateName,{
      url: (stateName=='parent.dashboard') ? "deals/:dealId" : "/deals/:dealId",
      views:{
        'fsItem@parent':{
          templateUrl: "/static/html/fsItems/dealNewD.html",
          controller: 'dealCtrl',
        }
      }
    });
 }

});

这个问题还不太清楚,但听起来你想要一个在路由更改之间持续存在的状态变量。我建议使用工厂或服务。看看AngularJS中的控制器之间共享变量。