我可以在angularjs中访问活动控制器外的$状态吗?

时间:2014-05-15 15:24:19

标签: angularjs single-page-application angular-ui-router

我正在编写一个基于Hot Towel模板的Angularjs应用程序(使用ui-router)。基本布局是一个标题区域,其中包含导航标签和用户下拉列表,以及低于该标准的内容区域。

html看起来基本上是这样的:

<header>
   <div data-ng-include="'header.html'"></div>
</header>
<div ui-view></div>

我希望我的网址格式为 /:username / detail1 /:username / detail2 。我们的想法是,您可以从下拉列表中选择一个用户,内容选项卡将显示特定于所选用户的信息。

问题:

在我的标题的控制器中,我需要知道当前用户,以便我可以在下拉列表中选择适当的项目,但我无法访问:username参数。 $ stateParams为空。我想这是有道理的,因为文档说:

  

$ stateParams对象只包含在该状态下注册的参数。

我的标题并未与任何特定状态相关联。尽管如此,像这样在标题中使用导航控件似乎并不像我试图做的那些古怪的边缘情况。我知道我可以使用$ location来获取网址并解析用户名,但这感觉很糟糕。

我是否遗漏了一些显而易见的事情,或以错误的方式解决这个问题?

1 个答案:

答案 0 :(得分:0)

$state$stateParams添加到模块运行功能中的$rootScope,如下所示:

angular.module('<module-name>').run(function($rootScope, $state, $stateParams) {
  $rootScope.$state = $state;
  $rootScope.$stateParams = $stateParams;
});

这样您就可以在模板和控制器中访问$state$stateParams,因为这些项目将在每个范围内。