我在ng-repeat上有一系列锚标记,它们通过fixture.id
变量路由到特定的详细信息页面。
我想在详细信息页面的控制器中访问来自ng-repeat范围的fixture
对象,但似乎无法做到。
第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请求的服务。我不想每次都这样做,所以最好使用已经填充的数据。如果这是有道理的。
答案 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)
当您导航到第二页时,第一页中的控制器不再在范围内,并且其数据不再可用。有很多方法可以解决这个问题。
由于您已经在使用服务,因此可以在请求后将数据存储在服务级别,并在执行http请求之前修改服务以检查数据是否已存在。
我不熟悉你的布局,但如果有办法以一种方式显示数据,使细节显示为列表的子项,你可以通过parentscope访问它。
您可以将$ cacheFactory注入第一个控制器,并使用$ cacheFactory.put存储数据并将$ cacheFactory注入第二个控制器并使用$ cacheFactory.get再次检索数据。
这些只是我头顶的3个。您还可以使用本地存储,cookie等。
此外,当您显示项目的完整详细信息时,您在渲染列表时需要最少量的数据,并且需要更多数据。仅检索包含第一个状态中的最小数据要求的列表,然后当您导航到详细状态时,检索该项的所有数据可能更有效。
答案 2 :(得分:0)
ng-repeat为每个元素创建一个新范围,ng-include也创建一个新范围。 由ng-repeat为当前元素创建的范围。此范围保存迭代中的当前元素。