ফিল্টার ফাংশনে কোনও যুক্তি পাস করা সম্ভব হয় যাতে আপনি কোনও নাম দিয়ে ফিল্টার করতে পারেন?
কিছুটা এইরকম
$scope.weDontLike = function(item, name) {
console.log(arguments);
return item.name != name;
};
ফিল্টার ফাংশনে কোনও যুক্তি পাস করা সম্ভব হয় যাতে আপনি কোনও নাম দিয়ে ফিল্টার করতে পারেন?
কিছুটা এইরকম
$scope.weDontLike = function(item, name) {
console.log(arguments);
return item.name != name;
};
উত্তর:
প্রকৃতপক্ষে আরও একটি (সম্ভবত আরও ভাল সমাধান) রয়েছে যেখানে আপনি কৌণিকের স্থানীয় 'ফিল্টার' ফিল্টারটি ব্যবহার করতে পারেন এবং এখনও আপনার কাস্টম ফিল্টারটিতে যুক্তিগুলি পাস করতে পারেন।
নিম্নলিখিত কোড বিবেচনা করুন:
<div ng-repeat="group in groups">
<li ng-repeat="friend in friends | filter:weDontLike(group.enemy.name)">
<span>{{friend.name}}</span>
<li>
</div>
এই কাজটি করতে আপনি কেবল নিজের ফিল্টারটিকে নিম্নলিখিত হিসাবে সংজ্ঞায়িত করেছেন:
$scope.weDontLike = function(name) {
return function(friend) {
return friend.name != name;
}
}
আপনি এখানে দেখতে পাচ্ছেন, WeDontLike আসলে অন্য একটি ফাংশন দেয় যা আপনার পরামিতিটির সুযোগে পাশাপাশি ফিল্টার থেকে আসা আসল আইটেমটি দেয়।
আপনি এটি করতে পারেন বুঝতে পেরে আমাকে 2 দিন সময় লেগেছিল, এখনও কোথাও এই সমাধানটি দেখেনি।
চেকআউট একটি angular.js ফিল্টারের বিপরীত প্রান্তিকতা কিভাবে আপনি ফিল্টার অন্যান্য দরকারী অপারেশনের জন্য এই ব্যবহার করতে পারেন দেখুন।
আমি যা বুঝি সেগুলি থেকে আপনি কোনও ফিল্টার ফাংশনে আর্গুমেন্টগুলি পাস করতে পারবেন না ('ফিল্টার' ফিল্টার ব্যবহার করার সময়)। আপনার যা করতে হবে তা হ'ল একটি কাস্টম ফিল্টার লিখুন, এইভাবে:
.filter('weDontLike', function(){
return function(items, name){
var arrayToReturn = [];
for (var i=0; i<items.length; i++){
if (items[i].name != name) {
arrayToReturn.push(items[i]);
}
}
return arrayToReturn;
};
এখানে কর্মরত জেএসফিডাল: http://jsfiddle.net/pkozlowski_opensource/myr4a/1/
কাস্টম ফিল্টার না লিখে অন্য সাধারণ বিকল্পটি হ'ল একটি সুযোগে ফিল্টার আউট করার জন্য একটি নাম সঞ্চয় করা এবং তারপরে লিখুন:
$scope.weDontLike = function(item) {
return item.name != $scope.name;
};
আসলে আপনি একটি প্যারামিটার ( http://docs.angularjs.org/api/ng.filter:filter ) পাস করতে পারেন এবং কেবল এটির জন্য কোনও কাস্টম ফাংশনের প্রয়োজন নেই। আপনি যদি নীচে যেমন আপনার এইচটিএমএলটি পুনরায় লেখেন তবে এটি কাজ করবে:
<div ng:app>
<div ng-controller="HelloCntl">
<ul>
<li ng-repeat="friend in friends | filter:{name:'!Adam'}">
<span>{{friend.name}}</span>
<span>{{friend.phone}}</span>
</li>
</ul>
</div>
</div>
filter:['Adam', 'john']
আপনি কেবল টেম্পলেটটিতে এটি পছন্দ করতে পারেন
<span ng-cloak>{{amount |firstFiler:'firstArgument':'secondArgument' }}</span>
ফিল্টার মধ্যে
angular.module("app")
.filter("firstFiler",function(){
console.log("filter loads");
return function(items, firstArgument,secondArgument){
console.log("item is ",items); // it is value upon which you have to filter
console.log("firstArgument is ",firstArgument);
console.log("secondArgument ",secondArgument);
return "hello";
}
});
পকোজ্লোস্কি.ওপেনসোর্সের উত্তরে প্রসারিত করা এবং জাভাস্ক্রিপ্ট array's
বিল্টিন ফিল্টার পদ্ধতি ব্যবহার করে একটি প্রাকটিকৃত সমাধান হতে পারে:
.filter('weDontLike', function(){
return function(items, name){
return items.filter(function(item) {
return item.name != name;
});
};
});
এখানে jsfiddle লিঙ্ক ।
অ্যারে ফিল্টার আরও এখানে ।
আপনি কৌণিক ফিল্টার একাধিক যুক্তি পাস করতে পারেন!
আমার কৌণিক অ্যাপ্লিকেশন এবং এবং একটি অ্যাপ্লিকেশন স্তরের ভেরিয়েবল সংজ্ঞা দেওয়া হচ্ছে -
var app = angular.module('filterApp',[]);
app.value('test_obj', {'TEST' : 'test be check se'});
আপনার ফিল্টারটি এর মতো হবে: -
app.filter('testFilter', [ 'test_obj', function(test_obj) {
function test_filter_function(key, dynamic_data) {
if(dynamic_data){
var temp = test_obj[key];
for(var property in dynamic_data){
temp = temp.replace(property, dynamic_data[property]);
}
return temp;
}
else{
return test_obj[key] || key;
}
}
test_filter_function.$stateful = true;
return test_filter_function;
}]);
এবং এইচটিএমএল থেকে আপনি ডেটা প্রেরণ করবেন:
<span ng-bind="'TEST' | testFilter: { 'be': val, 'se': value2 }"></span>
এখানে আমি ফিল্টার একটি JSON অবজেক্ট পাঠাচ্ছি। আপনি স্ট্রিং বা সংখ্যার মতো কোনও প্রকারের ডেটাও পাঠাতে পারেন।
এছাড়াও আপনি ফিল্টার করতে গতিশীল সংখ্যক আর্গুমেন্ট পাস করতে পারেন, সেক্ষেত্রে আপনাকে সেই যুক্তিগুলি পেতে আর্গুমেন্টগুলি ব্যবহার করতে হবে।
একটি ওয়ার্কিং ডেমো জন্য এখানে যান - কৌণিক ফিল্টার একাধিক যুক্তি পাস
আপনি সহজভাবে ব্যবহার করতে পারেন | filter:yourFunction:arg
<div ng-repeat="group in groups | filter:weDontLike:group">...</div>
এবং জেএসে
$scope.weDontLike = function(group) {
//here your condition/criteria
return !!group
}