2013-05-31 41 views
16

在我的控制器後,我可以打電話:AngularJs首先在濾鏡陣列

$scope.list[0]; 

要訪問我的數組中的第一項。有沒有辦法做到這一點,記住濾波器。

比如我有:

filter:search 

在我復讀,我怎麼能叫$ scope.list [0];等於第一個搜索結果?

+0

我不是100%肯定你是問什麼......你想知道如何辨別你在過濾函數中的第一個元素? – Polaris878

回答

10

這可以通過注入濾波器的依賴到控制器,把它在代碼等

var filteredArray = filterDependency(arrayToFilter,args); 

它返回一個新的,過濾陣列來完成。由於您使用的是「過濾器」過濾器(它是名稱爲過濾器的過濾器),因此依賴項注入應爲filterFilter。你的控制器應是這個樣子:

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 
    });  
}); 

我們正在做的是設置輸入模式(search)的手錶,所以我們可以得到新的價值,並重新過濾器陣列的任何時候改變輸入時。


如果你需要從視圖中訪問ng-repeat指數,你可以使用特殊屬性$indexng-repeat喜歡裏面:

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

你可以還使用$first$middle$lastas shown in this Angular doc

演示Here is a fiddle

+0

感謝第一個是我所需要的更多 – dab

+1

第一個是優秀的解決方案。很好的想法和一個很好的解決方案!不過,我仍然不明白'filterFilter'依賴如何到達那裏。 – Neel

+1

對不起@Neel我剛剛看到這個評論!我們在定義控制器時注入了它。任何過濾器都可以這樣注入「[filtername] Filter」。這個過濾器恰好被命名爲「過濾器」,所以我們通過'filterFilter'注入過濾器。另一個隨機的例子可能會注入'dateFilter'或任何其他。 – sh0ber

3

不帶支架的訪問。如果你有一個ng-repeat帶有過濾器:

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

這裏的過濾列表是一種匿名的 - 它沒有可以訪問的名稱。

也就是說,如果你在docs for ngRepeat看一看,你會發現每個轉發器的範圍內,你必須$index$first$middle$last訪問。

因此,像

<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> 

會產生:

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