2013-05-31 43 views
16

Trong điều khiển của tôi, tôi có thể gọi:AngularJs đầu tiên trong mảng sau Lọc

$scope.list[0]; 

Để truy cập vào mục đầu tiên trong mảng của tôi. Có cách nào để làm điều này giữ bộ lọc trong tâm trí.

Ví dụ tôi có:

filter:search 

On lặp lại của tôi, làm sao tôi có thể gọi $ scope.list [0]; bằng kết quả tìm kiếm đầu tiên?

+0

Tôi không chắc chắn 100% những gì bạn đang yêu cầu ... Bạn đang tự hỏi làm thế nào bạn có thể biết bạn đang ở trên phần tử đầu tiên trong hàm lọc của bạn? – Polaris878

Trả lời

10

Điều này có thể được thực hiện bằng cách tiêm phụ thuộc của bộ lọc vào một bộ điều khiển và gọi đó là trong mã như

var filteredArray = filterDependency(arrayToFilter,args); 

mà trả về một mảng lọc mới. Vì bạn đang sử dụng bộ lọc "bộ lọc" (đó là bộ lọc có tên là bộ lọc), việc tiêm phụ thuộc phải là filterFilter. điều khiển của bạn nên tìm một cái gì đó như thế này:

var app = angular.module('myapp',[]); 
app.controller('ctrlParent',function($scope,filterFilter){ 
    var filteredArray = []; 
    $scope.list = ["abc","def","ghi","abcdefghi"]; 
    $scope.$watch('search',function(newValue){ 
     filteredArray = filterFilter($scope.list, newValue); 
     // do something with the first result 
     console.log(filteredArray[0]); // first result 
    });  
}); 

Những gì chúng ta đang làm là thiết lập một chiếc đồng hồ trên mô hình đầu vào (search) vì vậy chúng tôi có thể nhận được giá trị mới và tái lọc mảng bất cứ lúc nào đầu vào được thay đổi .


Cũng:

Nếu bạn cần truy cập vào chỉ số ng-repeat từ bên trong xem, bạn có thể sử dụng thuộc tính $index đặc biệt bên trong ng-repeat như:

<div ng-repeat="item in list | filter:search"> 
    {{$index}} 
</div> 

Bạn có thể cũng sử dụng $first, $middle$lastas shown in this Angular doc.

Demo: Here is a fiddle

+0

cảm ơn người đầu tiên là nhiều hơn những gì tôi cần – dab

+1

Người đầu tiên là giải pháp tuyệt vời. Vâng suy nghĩ và một giải pháp rất tốt! Tuy nhiên tôi vẫn không hiểu làm thế nào phụ thuộc 'filterFilter' đã có. – Neel

+1

Xin lỗi @Neel Tôi vừa mới nhìn thấy nhận xét này! Chúng tôi tiêm nó khi xác định bộ điều khiển. Bất kỳ bộ lọc nào cũng có thể được tiêm theo cách này "Bộ lọc [filtername]". Bộ lọc này xảy ra được đặt tên là "bộ lọc" vì vậy chúng tôi đã tiêm nó qua 'filterFilter'. Một ví dụ ngẫu nhiên khác có thể tiêm 'dateFilter' hoặc bất kỳ ví dụ nào khác. – sh0ber

0

Bạn đang sử dụng "ng-repeat"? Nếu vậy hãy xem các thuộc tính $ đầu tiên, $ index, $ middle và $ last. Điều này sẽ cho phép bạn để có được thông tin về các mục cụ thể từ lặp lại.

Để biết thêm thông tin, hãy kiểm tra tại đây: http://docs.angularjs.org/api/ng.directive:ngRepeat

3

Không có quyền truy cập khung. Nếu bạn có một bộ lọc ng-repeat:

ng-repeat="thing in things | filter:search" 

Danh sách được lọc ở đây là loại ẩn danh - nó không có tên mà bạn có thể truy cập.

Điều đó nói rằng, nếu bạn có một cái nhìn tại docs for ngRepeat, bạn sẽ thấy rằng bên trong phạm vi của từng lặp lại, bạn có thể truy cập $index, $first, $middle, và $last.

Vì vậy, một cái gì đó giống như

<body ng-app="App" ng-controller="Main"> 
    <pre ng-repeat="n in nums | filter:isOdd"> 
     n={{n}}:index={{$index}}:first={{$first}}:middle{{$middle}}:last={{$last}} 
    </pre> 
</body> 

sẽ mang lại:

n=1:index=0:first=true:middlefalse:last=false 

    n=3:index=1:first=false:middletrue:last=false 

    n=5:index=2:first=false:middlefalse:last=true 

Fiddle

Các vấn đề liên quan