5

我正在编写一个非常简单的 Angular 应用程序来显示有关足球比赛的信息。对于数据库中的每场比赛,我想显示比赛或统计数据的视图,所以我正在实现这个简单的 URL 方案:

  • foo/matches:锦标赛Foo的比赛,
  • foo/stats:锦标赛Foo的统计数据。

index.html文件的结构如下:

<nav ng-controller="NavController">
  <ul>
    <li> <a href="#/{{ t }}/matches"> Matches </a> 
    <li> <a href="#/{{ t }}/status">  Stats </a>
  </ul>
</nav>

<div ng-view></div>

并且路由配置如下:

app.config(['$routeProvider', function ($routeProvider) {
  $routeProvider
    .when('/:t/matches', {templateUrl: 'partials/matches.html', controller: 'MatchesController'})
    .when('/:t/stats',   {templateUrl: 'partials/stats.html',   controller: 'StatsController'  })
}]);

我的问题是 HTML 中的那些{{ t }}链接。我希望这些链接可以将视图更改为当前锦标赛的统计数据或比赛列表。但是由于链接在视图之外,所以它们无法访问路由参数(我尝试注入$routeParams,我得到的只是一个空对象)。

总之,我无法创建链接以更改其外部的视图。导航栏不知道当前的锦标赛是什么。

我如何(以及最好的方法是)在视图之外访问视图的当前状态(在本例中为当前锦标赛)?

4

2 回答 2

4

阅读了一些关于范围的信息后,我了解了它们是如何嵌套的。我通过使用新控制器包装视图和导航栏解决了我的问题:

<div ng-controller="NavController">

  <nav>
    <ul>
      <li> <a href="#/{{ t }}/matches"> Matches </a> 
      <li> <a href="#/{{ t }}/status">  Stats </a>
    </ul>
  </nav>

  <div ng-view></div>

</div>

该视图将继承 NavController 的原型范围。我在外部范围内初始化了一个对象,并将所需的值分配给内部控制器中的一个属性:

 app.controller('NavController', function ($scope) {
     $scope.currentTournament = {};
 });

 app.controller('MatchesController', function ($scope, $routeParams) {
     // ...
     $scope.currentTournament.id = $routeParams.t;
 });

 app.controller('StatsController', function ($scope, $routeParams) {
     // ...
     $scope.currentTournament.id = $routeParams.t;
 });
于 2013-09-10T09:03:50.120 回答
2

如果您使用的是ui-router,则可以使用 $stateParams 服务从应用程序的任何位置访问状态和状态变量。

于 2013-09-10T00:51:36.030 回答