Rumah > hujung hadapan web > tutorial js > Penjelasan terperinci tentang menggunakan Penapis dalam Angularjs_AngularJS

Penjelasan terperinci tentang menggunakan Penapis dalam Angularjs_AngularJS

WBOY
Lepaskan: 2016-05-16 15:11:09
asal
2091 orang telah melayarinya

Fungsi Penapis adalah untuk menerima input, memprosesnya melalui peraturan tertentu, dan kemudian mengembalikan hasil yang diproses kepada pengguna. Penapis boleh digunakan dalam templat, pengawal atau perkhidmatan, dan ia juga mudah untuk menyesuaikan Penapis.

Gunakan Penapis dalam templat

Penapis boleh digunakan dalam templat paparan menggunakan ungkapan sintaks berikut:

{{ ungkapan | penapis }}

Contohnya: Format {{ 12 | mata wang }} menggunakan penggunaan penapis mata wang untuk menapis nombor 12 ke dalam bentuk mata wang, dan hasilnya ialah $12.00.

Penapis boleh digunakan pada hasil penapisan lain. Ini dipanggil "rantaian" dan digunakan dengan sintaks berikut:

{{ penapisan | Parameter mungkin diperlukan dalam Penapis. Sintaksnya ialah:

{{ ungkapan |. penapis: hujah1: hujah2:... }}


Contohnya: Format {{ 1234 |. nombor:2 }} menggunakan penggunaan penapis nombor untuk menapis nombor 1234 menjadi nombor dengan dua titik perpuluhan.

Gunakan penapis dalam pengawal, perkhidmatan dan arahan


Anda boleh menggunakan penapis dalam pengawal, perkhidmatan dan arahan.

Untuk melakukan ini, anda perlu menyuntik nama kebergantungan ke dalam pengawal/perkhidmatan/arahan anda: penapis; Parameter yang disuntik ialah fungsi yang mengambil nilai sebagai parameter pertama dan kemudian menggunakan parameter kedua untuk menapis parameter.

Contoh berikut menggunakan Penapis yang dipanggil penapis. Penapis ini boleh mengurangkan tatasusunan berdasarkan sub tatasusunan. Anda juga boleh menggunakan penanda dalam templat paparan, seperti: {{ctrl.array|filter:'a'}}, yang akan melakukan carian teks penuh untuk 'a'. Walau bagaimanapun, menggunakan penapis dalam templat paparan akan menapis semula setiap penapis, dan jika tatasusunan agak besar, ia akan dimuatkan beberapa kali.

Jadi contoh berikut memanggil terus penapis dalam pengawal. Melalui ini, pengawal boleh memanggil penapis apabila diperlukan (contohnya: apabila data bahagian belakang dimuatkan atau ungkapan penapis berubah).

index.html:


<div ng-controller="FilterController as ctrl">
 <div>
  All entries:
  <span ng-repeat="entry in ctrl.array">{{entry.name}} </span>
 </div>
 <div>
  Entries that contain an "a":
  <span ng-repeat="entry in ctrl.filteredArray">{{entry.name}} </span>
 </div>
</div>
 
Salin selepas log masuk
skrip.js:


angular.module('FilterInControllerModule', []).
controller('FilterController', ['filterFilter', function(filterFilter) {
 this.array = [
  {name: 'Tobias'},
  {name: 'Jeff'},
  {name: 'Brian'},
  {name: 'Igor'},
  {name: 'James'},
  {name: 'Brad'}
 ];
 this.filteredArray = filterFilter(this.array, 'a');
}]);
Salin selepas log masuk
Hasilnya ialah:

All entries: Tobias Jeff Brian Igor James Brad
Entries that contain an "a": Tobias Brian James Brad
Salin selepas log masuk
Buat penapis tersuai:


Menulis penapis anda sendiri adalah sangat mudah: hanya daftarkan fungsi kilang penapis baharu dalam modul anda. Secara dalaman, filterProvider digunakan di sini. Fungsi kilang ini harus mengembalikan fungsi penapis baharu dengan nilai input sebagai hujah pertama. Sebarang parameter penapis diluluskan sebagai parameter tambahan kepada fungsi penapis.

Fungsi penapis ini sepatutnya menjadi fungsi yang mudah. Ini bermakna ia sepatutnya tidak mempunyai kewarganegaraan dan idempoten. Apabila fungsi input berubah, Angular bergantung pada sifat ini dan melaksanakan penapis.

Nota: Nama penapis mestilah pengecam ungkapan sudut yang sah. Contohnya huruf besar atau orderBy. Aksara khas tidak dibenarkan dalam nama, seperti tanda sempang dan noktah tidak dibenarkan. Jika anda mahu penapis anda diberi ruang nama, maka anda boleh menggunakan huruf besar (myappSubsectionFilterx) atau garis bawah (myapp_subsection_filterx).

Penapis contoh berikut membalikkan rentetan. Selain itu, ia boleh menambah syarat untuk menjadikan rentetan huruf besar.

index.html


<div ng-controller="MyController">
 <input ng-model="greeting" type="text"><br>
 No filter: {{greeting}}<br>
 Reverse: {{greeting|reverse}}<br>
 Reverse + uppercase: {{greeting|reverse:true}}<br>
 Reverse, filtered in controller: {{filteredGreeting}}<br>
</div>
 
Salin selepas log masuk
skrip.js


angular.module('myReverseFilterApp', [])
.filter('reverse', function() {
 return function(input, uppercase) {
  input = input || '';
  var out = "";
  for (var i = 0; i < input.length; i++) {
   out = input.charAt(i) + out;
  }
  // conditional based on optional argument
  if (uppercase) {
   out = out.toUpperCase();
  }
  return out;
 };
})
.controller('MyController', ['$scope', 'reverseFilter', function($scope, reverseFilter) {
 $scope.greeting = 'hello';
 $scope.filteredGreeting = reverseFilter($scope.greeting);
}]);
Salin selepas log masuk
Hasilnya ialah:

No filter: hello
Reverse: olleh
Reverse + uppercase: OLLEH
Reverse, filtered in controller: olleh
Salin selepas log masuk
Penapis stateful


Adalah sangat disyorkan untuk menulis penapis stateful kerana ini tidak boleh dioptimumkan dengan Angular, yang sering membawa kepada isu prestasi. Banyak penapis stateful ditukar kepada penapis stateless hanya dengan mendedahkan keadaan tersembunyi sebagai model dan menukarnya menjadi parameter penapis.

Walau bagaimanapun, jika anda perlu menulis penapis stateful, anda mesti menandakan penapis sebagai $stateful, yang bermaksud bahawa ia akan dilaksanakan satu kali atau lebih semasa setiap kitaran $digest.

indeks,html


<div ng-controller="MyController">
 Input: <input ng-model="greeting" type="text"><br>
 Decoration: <input ng-model="decoration.symbol" type="text"><br>
 No filter: {{greeting}}<br>
 Decorated: {{greeting | decorate}}<br>
</div>
 
Salin selepas log masuk
skrip.js:


angular.module('myStatefulFilterApp', [])
.filter('decorate', ['decoration', function(decoration) {

 function decorateFilter(input) {
  return decoration.symbol + input + decoration.symbol;
 }
 decorateFilter.$stateful = true;

 return decorateFilter;
}])
.controller('MyController', ['$scope', 'decoration', function($scope, decoration) {
 $scope.greeting = 'hello';
 $scope.decoration = decoration;
}])
.value('decoration', {symbol: '*'});

Salin selepas log masuk
Hasilnya ialah:

No filter: hello
Decorated: *hello*
Salin selepas log masuk
Lain kali saya akan menulis artikel tentang penggunaan biasa penapis dalam angularjs.
Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan