Saya mencari cara untuk memberitahu angular untuk melewati sebuah item dalam ng-repeat jika cocok dengan ekspresi, pada dasarnya continue
;
Dalam pengontrol:
$scope.players = [{
name_key:'FirstPerson', first_name:'First', last_name:'Person'
}, {
name_key:'SecondPerson', first_name:'Second', last_name:'Person'
}]
Sekarang di template saya, saya ingin menunjukkan kepada semua orang yang tidak cocok name_key='FirstPerson'
. Saya pikir itu harus menjadi filter jadi saya menyiapkan Plunkr untuk bermain-main dengannya tetapi belum beruntung. Percobaan Plunkr
angularjs
angularjs-ng-repeat
aron.duby
sumber
sumber
Jawaban:
Seperti yang disarankan oleh @Maxim Shoustin , cara terbaik untuk mencapai apa yang Anda inginkan adalah dengan menggunakan filter khusus.
Tetapi ada cara lain, salah satunya adalah dengan menggunakan
ng-if
direktif pada elemen yang sama Anda meletakkanng-repeat
direktif (juga, ini plunkernya ):<ul> <li ng-repeat="player in players" ng-if="player.name_key!='FirstPerson'"></li> </ul>
Hal ini mungkin memberikan kerugian kecil dari sudut pandang estetika, tetapi memiliki keuntungan besar bahwa pemfilteran Anda dapat didasarkan pada aturan yang tidak terkait erat dengan
players
array dan yang dapat dengan mudah mengakses data lain dalam cakupan aplikasi Anda:<li ng-repeat="player in players" ng-if="app.loggedIn && player.name != user.name" ></li>
Perbarui
Seperti yang dinyatakan, ini adalah salah satu solusi untuk masalah seperti ini dan mungkin sesuai atau tidak sesuai dengan kebutuhan Anda.
Seperti yang ditunjukkan di komentar,
ng-if
is a directive, yang sebenarnya berarti mungkin melakukan lebih banyak hal di latar belakang daripada yang Anda harapkan.Misalnya,
ng-if
membuat cakupan baru dari induknya :Ini biasanya tidak memengaruhi perilaku normal, tetapi untuk mencegah kasus yang tidak terduga, Anda harus mengingatnya sebelum menerapkan.
sumber
Saya tahu ini adalah yang lama, tetapi jika seseorang akan mencari solusi lain yang mungkin, berikut adalah cara lain untuk menyelesaikannya - gunakan fungsi filter standar :
Jadi untuk contoh TS, sesuatu seperti ini harus dilakukan:
<ul> <li ng-repeat="player in players | filter: { name_key: '!FirstPerson' }"></li> </ul>
Tidak perlu menulis filter khusus, tidak perlu menggunakan
ng-if
dengan cakupan barunya.sumber
player in players | filter: { name_key: '' }
? Arahan khusus itu tidak akan cocok hanya dengan pemain dengan no / an kosongname_key
. Kebalikannya,name_key: '!'
dimaksudkan untuk memilih pemain dengan non-kosongname_key
juga tidak akan berfungsi.ng-repeat="(key, val) in player"
Anda dapat menggunakan filter khusus saat Anda menerapkan
ng-repeat
. Sesuatu seperti:data-ng-repeat="player in players | myfilter:search.name
myfilter.js
:app.filter('myfilter', function() { return function( items, name) { var filtered = []; angular.forEach(items, function(item) { if(name == undefined || name == ''){ filtered.push(item); } /* only if you want start With*/ // else if(item.name_key.substring(0, name.length) !== name){ // filtered.push(item); // } /* if you want contains*/ // else if(item.name_key.indexOf(name) < 0 ){ // filtered.push(item); // } /* if you want match full name*/ else if(item.name_key !== name ){ filtered.push(item); } }); return filtered; }; });
Demo Plunker
sumber