Penapis Angularjs ialah salah satu ciri hebat angularjs. Suatu hari nanti anda mungkin perlu menggunakan penapis tersuai dan bernasib baik anda menemui catatan blog ini.
Ditunjukkan di bawah ialah rupa penapis tersuai (perhatikan penapis saya):
Penapis tersuai kami dipanggil "penapis saya", yang mempunyai 4 parameter yang dipisahkan oleh ':'.
Ini ialah input sampel yang akan digunakan:
$scope.friends = [{name:'John', phone:'555-1276'}, {name:'Annie', phone:'800-BIG-MARY'}, {name:'Mike', phone:'555-4321'}, {name:'Adam', phone:'555-5678'}, {name:'David', phone:'555-8765'}, {name:'Mikay', phone:'555-5678'}];
Penapis hanya menunjukkan item dengan "555" dalam nombor telefon, berikut ialah output sampel:
Name Phone John 555-1276 Mike 555-4321 Adam 555-5678 David 555-8765 Mikay 555-5678
Aliran pemprosesan penapisan "555" dilaksanakan oleh "windowScopedFilter", yang merupakan parameter keempat penapis 'myfilter'.
Mari laksanakan fungsi ini (tambahkan pengelogan pada setiap parameter input):
var myapp = angular.module('MyFilterApp', []); myapp.filter('myfilter', function() { return function(input, param1) { console.log("------------------------------------------------- begin dump of custom parameters"); console.log("input=",input); console.log("param1(string)=", param1); var args = Array.prototype.slice.call(arguments); console.log("arguments=", args.length); if (3<=args.length) { console.log("param2(string)=", args[2]); } if (4<=args.length) { console.log("param3(bool)=", args[3]); } console.log("------------------------------------------------- end dump of custom parameters"); // filter if (5<=args.length) { return window[args[4]](input); } return input; }; });
Kebanyakan kod di atas dilog (Nota Penterjemah: Paparkan maklumat ke konsol).
// filter if (5<=args.length) { return window[args[4]](input); } return input;
"return window[args[4]](input)" memanggil parameter keempat, iaitu 'windowScopedFilter'.
"------------------------------------------------- begin dump of custom parameters" custom_filter_function.html:21 "input=" [object Array] custom_filter_function.html:22 "param1(string)=" "param1" custom_filter_function.html:23 "arguments=" 5 custom_filter_function.html:25 "param2(string)=" "param2" custom_filter_function.html:27 "param3(bool)=" true custom_filter_function.html:30 "------------------------------------------------- end dump of custom parameters" custom_filter_function.html:32 "------------------------------------------------- begin dump of custom parameters" custom_filter_function.html:21 "input=" [object Array] custom_filter_function.html:22 "param1(string)=" "param1" custom_filter_function.html:23 "arguments=" 5 custom_filter_function.html:25 "param2(string)=" "param2" custom_filter_function.html:27 "param3(bool)=" true custom_filter_function.html:30 "------------------------------------------------- end dump of custom parameters" custom_filter_function.html:32
Kod penuh:
<html> <head> <script src="angular.min.js"></script> <script type="text/javascript"> function windowScopedFilter (input) { var output = []; angular.forEach(input, function(v,k){ if (v.phone.contains("555")) { output.push(v); } }); return output; } var myapp = angular.module('MyFilterApp', []); myapp.filter('myfilter', function() { return function(input, param1) { console.log("------------------------------------------------- begin dump of custom parameters"); console.log("input=",input); console.log("param1(string)=", param1); var args = Array.prototype.slice.call(arguments); console.log("arguments=", args.length); if (3<=args.length) { console.log("param2(string)=", args[2]); } if (4<=args.length) { console.log("param3(bool)=", args[3]); } console.log("------------------------------------------------- end dump of custom parameters"); // filter if (5<=args.length) { return window[args[4]](input); } return input; }; }); myapp.controller('MyFilterController', ['$scope', function($scope) { $scope.friends = [{name:'John', phone:'555-1276'}, {name:'Annie', phone:'800-BIG-MARY'}, {name:'Mike', phone:'555-4321'}, {name:'Adam', phone:'555-5678'}, {name:'David', phone:'555-8765'}, {name:'Mikay', phone:'555-5678'}]; }]); </script> </head> <body ng-app="MyFilterApp"> <div ng-controller="MyFilterController"> <table id="searchTextResults"> <tr><th>Name</th><th>Phone</th></tr> <tr ng-repeat="friend in friends |myfilter:'param1':'param2':true:'windowScopedFilter'"> <td>{{friend.name}}</td> <td>{{friend.phone}}</td> </tr> </table> </div> <hr> </body> </html>