访问另一个范围中的当前ng-repeat迭代元素

时间:2016-05-23 20:08:04

标签: angularjs scope angularjs-scope local ng-repeat

我在ng-repeat上有一系列锚标记,它们通过fixture.id变量路由到特定的详细信息页面。

我想在详细信息页面的控制器中访问来自ng-repeat范围的fixture对象,但似乎无法做到。

HTML

第1页:

<a href="#/knockout/{{fixture.id}}" ng-repeat="fixture in getFixtures | filter: { formatted_date: '10.06.2016' }:true | limitTo: 1" class="match">

         <div class="flag-wrapper">
             <div class="flag-{{fixture.localteam_id}}"></div>
         </div>
         <div class="flag-wrapper">
             <div class="flag-{{fixture.visitorteam_id}}"></div>
         </div>

</a>

第2页:

<div class="lineup_home">
  <h2>
    <span class="flag-icon-**fixture.localteam_id**}}></span>
  </h2>
  <h2>France</h2>
</div>

任何帮助都将不胜感激。

编辑:

所以我可以从URL访问fixture.id,这很好......我想从fixture对象访问其他属性,例如fixture.localteam_id。我该怎么做?

另外,我知道我可以从getFixtures数组中访问它,但这是一个发出$ http请求的服务。我不想每次都这样做,所以最好使用已经填充的数据。如果这是有道理的。

3 个答案:

答案 0 :(得分:0)

编辑后:

要从通过$ http请求检索的对象访问其他属性,您可以在“Fixture”模块中创建Factory。

因此,无论何时调用“getFixtures”方法,都会更新工厂,并且所有必需的控制器都可以通过注入来共享数据:

angular.module('Fixture')
.factory('FixtureFactory', function() {
   //Get & set methods.
})

.controller('FixtureTableController', ['$scope', 'FixtureFactory',
    function($scope, FixtureFactory) {
   //Call getFixtures
   //Call SET method from Factory.
}])

.controller('FixtureDetailsController', ['$scope', 'FixtureFactory',
    function($scope, FixtureFactory) {
   //Call GET method from Factory to retrieve fixtures array.
}]);

答案 1 :(得分:0)

当您导航到第二页时,第一页中的控制器不再在范围内,并且其数据不再可用。有很多方法可以解决这个问题。

  1. 由于您已经在使用服务,因此可以在请求后将数据存储在服务级别,并在执行http请求之前修改服务以检查数据是否已存在。

  2. 我不熟悉你的布局,但如果有办法以一种方式显示数据,使细节显示为列表的子项,你可以通过parentscope访问它。

  3. 您可以将$ cacheFactory注入第一个控制器,并使用$ cacheFactory.put存储数据并将$ cacheFactory注入第二个控制器并使用$ cacheFactory.get再次检索数据。

  4. 这些只是我头顶的3个。您还可以使用本地存储,cookie等。

    此外,当您显示项目的完整详细信息时,您在渲染列表时需要最少量的数据,并且需要更多数据。仅检索包含第一个状态中的最小数据要求的列表,然后当您导航到详细状态时,检索该项的所有数据可能更有效。

答案 2 :(得分:0)

ng-repeat为每个元素创建一个新范围,ng-include也创建一个新范围。 由ng-repeat为当前元素创建的范围。此范围保存迭代中的当前元素。