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

时间:2014-04-09 09:45:33

标签: javascript angularjs

费拉斯,费拉萨斯。 我是用手机写的,所以请原谅我有什么误导或不清楚的地方。 在我的应用程序中,可以从任何其他父状态继承状态,称为" deals /:dealId:"。 截至目前,我必须一遍又一遍地为任何其他可用的父状态定义相同的状态,因此可以从应用程序的任何URL访问它。 例如:父状态"仪表板"有一个子状态" parent.dashboard.deals",所以是另一个状态 - " parent.lookup.deals",依此类推。 在谷歌搜索解决方案时,我在plunkr上找到了一个使用父状态变量定义创建通配符状态环境的示例: .STATE(currentState +" .deals&#34)。 "男孩哦,男孩",我心想。这正是我所需要的。好吧,不是。 我正在测试它,并在静态" currentState"变量和它工作得很好,我认为我要做的就是在父状态切换之间动态更改currentState变量。 看起来当角度在加载时第一次生成路线时,它采用默认的" currentState" var作为字符串并定义该状态静态。所以,即使我改变了默认的" currentState"路由更改之间的var,状态仅可用于第一个生成的状态定义。 谢谢。

2 个答案:

答案 0 :(得分:1)

我已经在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',
        }
      }
    });
 }

});

答案 1 :(得分:0)

问题不是很清楚,但听起来你想要一个在路线变化之间持续存在的状态变量。我建议使用factory or service。看看Sharing a Variable Between Controllers in AngularJS