2015-11-13 37 views
3

我正在使用ng-repeat顯示聯繫人的信息。每個聯繫人都有細節。我試圖抓住列表中的第一個對象。這裏是我的代碼:如何獲得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-重複?我想爲其他窗口保存該對象。

+0

可能重複[Angular Js:如何在ng-repeat中查找第一個和最後一個元素並向它們添加特殊類?](http://stackoverflow.com/questions/24973117/angular-js-how-to-查找首先和最後元素in-ng-repeat-and-add-special-cla) – Shomz

回答

1

你可以使用「由$索引道」和「如果NG-」使用,以確定當它的第一個對象:

<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」方法調用「鍵'你給這個東西。

+0

您可能還想看看跟蹤第一次迭代的'track by $ first'。儘管如此,我還沒有使用過。 –

+0

當應用$ index和order by filter應用時,會拋出錯誤**'錯誤:[filter:notarray]預期的數組,但接收到:{} ** –

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] }} 
1

我猜你不只是要顯示的一條記錄,並且您還希望在之後應用您的過濾器/排序後,從陣列開始的第一條記錄。如果是這種情況,我會建議在最後一個條件後添加一個別名,然後在控制器中引用該別名。

這裏是一個小提琴,以幫助顯示:

http://jsfiddle.net/nbavesuo/

我建議你不叫在NG-重複的功能,而不是引用已經被稱爲數組:

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

然後在你的控制器中:

$scope.contactList = ContactService.getContactList(); 

$scope.selectedContact = function(contact){ 
    console.log(contact); 
    console.log($scope.filteredArray[0]); 
} 

你會即美元的scope.filteredArray [0]將有排序的數組中的第一個元素。

相關問題