如何在ng-repeat中获得第一个对象

时间:2015-11-13 21:52:37

标签: angularjs

我正在使用ng-repeat显示联系人的信息。每个联系人都有详细信我试图抓住列表中的第一个对象。这是我的代码:

<div ng-repeat="contact in contactList() | filter:{type: 'direct'} | filter:{duration: '1 year'} | orderBy: 'Date'">
    <div ng-click="selectedContact(contact)">
        <div>{{contact.name}}</div>
        <div>{{contact.type}}</div>
    </div>
</div>

contactList()是一个调用服务的函数:

$scope.contactList = function () {
    return ContactService.getContactList();
};

如何获取ng-repeat中的第一个联系对象?我想将该对象保存到其他窗口。

3 个答案:

答案 0 :(得分:1)

您可以使用'track by $ index'并使用'ng-if'来确定它何时是第一个对象:

<div ng-repeat="contact in contactList()| filter:{type: 'direct'}| filter:{duration:'1 year'| orderBy: 'Date' | track by $index"
     ng-if="$index == 0" 
     ng-init="someMethod()">
    <div  ng-click="selectedContact(contact)">
             <div> {{contact.name}}</div>
             <div>{{contact.type}}</div>
    </div>
</div>

然后,您可以在控制器中使用“someMethod()”函数将对象保存到窗口对象或本地存储:

function someMethod(key, object) {
    window.localStorage.setItem(key, object);
}

如果您想使用它,我已经编写了一个用于此事的对象:

var LocalStorageManager = {
setValue: function(key, value) {
    window.localStorage.setItem(key, JSON.stringify(value));
},
getValue: function(key) {
    try {
        return JSON.parse(window.localStorage.getItem(key));
    } catch (e) {

    }
  }
};

所以,你可以在你的'someMethod()中使用它和你的东西:

function someMethod(key, object) {
    LocalStorageManager.setValue(key, object);
}

然后,要获取对象,您只需使用'getValue'方法调用您给对象的'key'。

答案 1 :(得分:1)

您可以将新范围属性设置为过滤和排序的结果。请注意,您如何使用()

对过滤器进行分组
<div ng-repeat="contact in contacts = (contactList() | filter:{type: 'direct'} | filter:{duration:'1 year'} | orderBy: 'Date')">
    <div ng-click="selectedContact(contact)">
        <div>{{contact.name}}</div>
        <div>{{contact.type}}</div>
    </div>
</div>

然后从这个列表中获取第一个,它只是[0]

{{ contacts[0] }}

答案 2 :(得分:1)

我猜你不想只显示一条记录,而且你还希望在应用过滤器/订购之后阵列中的第一条记录。如果是这种情况,我建议您在上一个条件之后添加别名,然后在控制器中引用该别名。

这是一个帮助显示的小提琴:

http://jsfiddle.net/nbavesuo/

我建议你不要在ng-repeat中调用函数,而是引用一个已被调用的数组:

 $array=['apple','orange'];
 foreach($array as $v) 
 {
   $stmt = $db->exec("Insert into test(fruit) VALUES ('$v')");
 }

然后在你的控制器中:

<div ng-repeat="contact in contactList| 
    filter:{type: 'direct'}| filter:{duration:'1 year'}| 
    orderBy: 'Date' as filteredArray">
....

您将看到$ scope.filteredArray [0]将在排序数组中包含第一个元素。