【问题标题】:Angular - Get ng-repeat objectAngular - 获取 ng-repeat 对象
【发布时间】:2015-07-21 00:54:54
【问题描述】:

我需要在 ng-click 上从 ng-repeat 中取出当前对象,我不能使用 $index,因为我正在使用 orderBy,因此它给了我相对于范围对象的错误索引。理想情况下,我希望能够单击对象(缩略图)并让 $scope.activePerson 获得所有对象值。

我的数据结构如下:

      [
        {
          'name': 'john'
        },
        {
          'name': 'toby'
        },
        {
          'name': 'sarah'
        }
      ]

这非常简单,我的真实对象有 30 多个 KV 对和子对象。我要重复 10 个对象(每批 4 个)。

我当前的 HTML 是:

.item.fourth(ng-repeat="person in people | orderBy:'-name' " ng-show="$index <= 3" nid="{{person.guid}}"

谢谢

【问题讨论】:

  • 不用担心索引......只需将整个对象传递给 ng-click 函数。也看看limitTo: length:start过滤器

标签: javascript html json angularjs angularjs-ng-repeat


【解决方案1】:

ng-repeat="person in people"中只是person

我不确定你使用的是哪种降价,你肯定没有 html,但你想要类似的东西:

<div 
     ng-repeat="person in people | orderBy:'-name' " 
     ng-show="$index <= 3" 
     nid="{{person.guid}}" 
     ng-click="activePerson = person">
</div>

请注意,ng-repeat 创建了一个子范围,因此您需要在父范围中设置 activePerson

【讨论】:

  • 是玉。谢谢,这也是一个解决方案。
【解决方案2】:

你可以只使用 orderBy 并从 ng-repeat 复制当前对象,see this plunkr. 相关代码:

控制器

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.stuff = [
        {
          'name': 'john'
        },
        {
          'name': 'toby'
        },
        {
          'name': 'sarah'
        }
      ];

    $scope.setActivePerson = function (obj) {
      $scope.activePerson = obj;
    };
});

查看

<body ng-controller="MainCtrl">
    <div ng-repeat="thing in stuff | orderBy: 'name'">
      <input type="radio" ng-click="setActivePerson(thing)" />
      {{ thing.name }}
    </div>
    <br />
    <div ng-model="activePerson">Active: {{ activePerson.name }}</div>
  </body>

【讨论】:

  • 这行不通,请尝试选择 sarah,toby 将成为活跃的人。
  • 你是对的,检查更新的plunkr:plnkr.co/edit/UPwzeJ7iXcP1IRUB09BF你只需要将人复制到activePerson。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 2018-12-08
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 2016-04-15
相关资源
最近更新 更多