sudut ng-repeat melewatkan item jika pertandingan ekspresi

I'm mencari cara untuk pada dasarnya memberitahu sudut untuk melewatkan item di ng-ulangi jika pertandingan ekspresi, pada dasarnya lanjutkan;

Di controller:

$scope.players = [{
    name_key:'FirstPerson', first_name:'First', last_name:'Person'
}, {
    name_key:'SecondPerson', first_name:'Second', last_name:'Person'
}]

Sekarang saya template saya ingin menunjukkan kepada semua orang bahwa doesn't match name_key='FirstPerson'. Saya pikir itu harus menjadi filter agar aku setup Plunkr untuk bermain-main dengan hal itu tapi belum't punya keberuntungan. Plunkr Usaha

Mengomentari pertanyaan (1)
Larutan

Sebagai @Maxim Shoustin menyarankan, cara terbaik untuk mencapai apa yang anda inginkan akan menggunakan filter khusus. Tapi ada cara lain, salah satu dari mereka yang menggunakan ng-jika direktif pada unsur yang sama yang anda menempatkan ng-repeat direktif (juga, di sini's plunker):

<ul>
    <li ng-repeat="player in players" ng-if="player.name_key!='FirstPerson'"></li>
</ul>

Ini dapat menimbulkan kerugian kecil dari estetical perspektif, tapi memiliki keuntungan besar yang anda penyaringan dapat didasarkan pada suatu aturan yang tidak ketat ditambah dengan pemain array dan yang dapat dengan mudah mengakses data dalam aplikasi anda's lingkup:

  <li 
      ng-repeat="player in players" 
      ng-if="app.loggedIn && player.name != user.name"
  ></li>

Update Seperti yang dinyatakan, ini adalah salah satu solusi untuk masalah seperti ini dan mungkin atau mungkin tidak sesuai dengan kebutuhan anda. Seperti yang ditunjukkan di komentar, ng-jika adalah direktif, yang benar-benar berarti bahwa itu mungkin melakukan hal-hal di latar belakang daripada yang mungkin anda harapkan. Misalnya, ng-jika menciptakan ruang lingkup baru dari it's orang tua:

lingkup yang dibuat dalam ngIf mewarisi dari orang tua lingkup menggunakan prototypal warisan.

Hal ini biasanya doesn't mempengaruhi perilaku normal tetapi dalam rangka untuk mencegah keadaan yang tidak terduga, anda harus menjaga ini dalam pikiran sebelum menerapkan.

Komentar (3)

Saya tahu ini adalah satu yang lama, tetapi dalam kasus seseorang akan mencari solusi lain yang mungkin, berikut adalah cara lain untuk memecahkan masalah ini digunakan standar filter fungsi:

Objek: pola objek dapat digunakan untuk menyaring sifat-sifat tertentu pada benda-benda yang terkandung oleh array. Misalnya {nama:"M", telepon:"1"} predikat akan mengembalikan sebuah array dari item yang memiliki nama properti mengandung "M" dan properti telepon yang berisi "1". ... Predikat dapat ditiadakan dengan awalan string dengan !. Misalnya {nama: "!M"} predikat akan mengembalikan sebuah array dari item yang memiliki nama properti tidak mengandung "M".

Jadi untuk TS contoh sesuatu seperti ini harus dilakukan:

<ul>
    <li ng-repeat="player in players | filter: { name_key: '!FirstPerson' }"></li>
</ul>

Tidak perlu menulis filter kustom, tidak perlu menggunakan ng-jika dengan itu's lingkup baru.

Komentar (5)

Anda dapat menggunakan khusus filter ketika 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

Komentar (1)