lut*_*dia 15 javascript arrays angularjs angularjs-ng-repeat
我是一个相当新的棱角分明,并且能够在某种程度上绕过.但我似乎无法找到这种情况的答案......
我有一系列对象,我从firebase中拉下来.我正在对对象使用ng-repeat,然后相应地显示数据.我试图将索引作为routeparam传递给"编辑"控制器.在这种情况下,我想像预期的那样拉出对象数据.但是,当我过滤ng-repeat时,我得到过滤内容的索引.找到真正的指数我在哪里错了?
.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
$routeProvider
.when('/profiles/:index', {
templateUrl: '../views/profile.html',
controller: 'profileCtrl'
});
Run Code Online (Sandbox Code Playgroud)
路线在上面,控制器在下面
.controller('profileCtrl', function( $scope, $routeParams ){
$scope.teamProfile = $scope.ourTeam[$routeParams.index];
$scope.index = $routeParams.index;
});
Run Code Online (Sandbox Code Playgroud)
最后是重复内容的html片段.
<div class="profileName"><a href="/profiles/{{$index}}">{{member.name}}</a><span class="handle">{{member.handle}}</span></div>
Run Code Online (Sandbox Code Playgroud)
Man*_*nas 33
试试这个 :
<div ng-repeat="member in members">
{{members.indexOf(member)}}
</div>
Run Code Online (Sandbox Code Playgroud)
indexOf始终返回ng-repeat中的原始索引
Jos*_*osh 11
不幸的$index是只有"重复元素的迭代器偏移量(0..length-1)"
如果您想要原始索引,则必须在过滤之前将其添加到集合中,或者根本不过滤元素.
一种可能的方法:
angular.forEach(members, function(member, index){
//Just add the index to your item
member.index = index;
});
<div ng-repeat="member in members">
<a href="/profiles/{{member.index}}">
</div>
Run Code Online (Sandbox Code Playgroud)
现在,似乎这种信息更像是一个ID而不是其他任何东西.希望这已经是记录的一部分,你可以绑定到它而不是使用索引.
您可以使用函数从数组中返回索引
<div ng-repeat="post in posts | orderBy: '-upvotes'">
<a href="#/posts/{{getPostIndex(post)}}"></a>
</div>
Run Code Online (Sandbox Code Playgroud)
而且功能
$scope.getPostIndex = function (post) {
return $scope.posts.indexOf(post); //this will return the index from the array
}
Run Code Online (Sandbox Code Playgroud)
在我的例子中,我有一个名为"posts"的对象数组,我在其上使用过滤器通过其中一个属性("upvotes"属性)对它们进行排序.然后,在"href"属性中,我通过引用传递它来调用"getPostIndex"函数,即当前对象.
getPostIndex()函数只是使用Javascript数组indexOf()方法从数组中返回索引.
关于这一点的好处是这个解决方案不依赖于特定的过滤器(如@holographix答案),并且适用于所有这些过滤器.
| 归档时间: |
|
| 查看次数: |
49445 次 |
| 最近记录: |