2017-06-01 51 views
1

標題可能有點混亂。請看下面的代碼,在Ng-Repeat中搜索而不隱藏任何東西

<html> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
<body> 
<div ng-app="myApp" ng-controller="namesCtrl"> 
<input type="text" ng-model="test"><br/> 
<div ng-repeat="x in names | filter:test"> {{ x }}</div> 

<script> 
angular.module('myApp', []).controller('namesCtrl', function($scope) { 
    $scope.names = [ 
     'Jani', 
     'Carl', 
     'Margareth', 
     'Hege', 
     'Joe', 
     'Gustav', 
     'Birgit', 
     'Mary', 
     'Kai' 
    ]; 
}); 
</script> 
</body> 
</html> 

用這些代碼我可以從scope.names中搜索一個名字。但問題是,我不想在搜索某個特定名稱時隱藏其他結果。這意味着,當我搜索「古斯塔夫」時,它應該在列表頂部而不隱藏其他名字。如果名稱是通過提供的關鍵字匹配進行排序的話,那將會更好。請幫忙。

+0

,你能否告訴我們某種視覺爲你想在這裏做什麼?我的膝蓋反應是,這應該在控制器中處理或者可能使用指令。 –

+0

想象一下,列表看起來像「貓,狗,鸚鵡」,當我搜索「狗」時,列表應該看起來像「狗,貓,鸚鵡」。 :D –

+0

第二次重複下面的內容,過濾器將是'filter:!test'?只是一個想法,不是一個認真的解決方案我認爲有很多更好的方法,但我現在只是設計 –

回答

1

排序依據是所期望的效果的選項之一:

<html> 
<script 
src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"> 
</script> 
<body> 
<div ng-app="myApp" ng-controller="namesCtrl"> 
<input type="text" ng-model="test"><br/> 
<div ng-repeat="x in names | orderBy:customOrdering"> {{ x }}</div> 
{{ log }} 

<script> 
angular.module('myApp', []).controller('namesCtrl', function($scope) { 
    $scope.test = ""; 
$scope.names = [ 
    'Jani', 
    'Carl', 
    'Margareth', 
    'Hege', 
    'Joe', 
    'Gustav', 
    'Birgit', 
    'Mary', 
    'Kai' 
]; 
$scope.customOrdering = function(a) { 
    return a.indexOf($scope.test) == -1; 
    //return a.toUpperCase().indexOf($scope.test.toUpperCase()) == -1; 
    // use that for case insensitive search 
} 
}); 
</script> 
</body> 
</html> 
+0

我試過了,不幸的是它不起作用。當我搜索「Joe」時,什麼都沒有發生 –

+0

這裏是[工作小提琴](https://jsfiddle.net/8g4a5ng5/) –

+0

**非常感謝** ......它不工作只是因爲我跳過了//返回a.toUpperCase()。indexOf($ scope.test.toUpperCase())== -1; //將其用於不區分大小寫的搜索。 –