AngularJS কাস্টম ফিল্টার ফাংশন


91

আমার নিয়ামকের ভিতরে, আমি অবজেক্টগুলির একটি অ্যারে ফিল্টার করতে চাই। এই প্রতিটি বস্তুর একটি মানচিত্র যা স্ট্রিং পাশাপাশি তালিকাগুলি থাকতে পারে

আমি $filter('filter')(array, function)ফর্ম্যাটটি ব্যবহার করার চেষ্টা করেছি তবে কীভাবে আমার ফাংশনের অভ্যন্তরে অ্যারের পৃথক উপাদানগুলি অ্যাক্সেস করতে হয় তা আমি জানি না। আমি যা চাই তা দেখানোর জন্য এখানে একটি স্নিপেট রয়েছে।

$filter('filter')(array, function() {
  return criteriaMatch(item, criteria);
});

এবং তারপরে criteriaMatch(), আমি স্বতন্ত্র সম্পত্তিগুলির প্রতিটি মিলছে কিনা তা পরীক্ষা করে দেখব

var criteriaMatch = function(item, criteria) {
  // go thro each individual property in the item and criteria
  // and check if they are equal
}

আমাকে এগুলি কন্ট্রোলারে করতে হবে এবং তালিকাগুলির একটি তালিকা সংকলন করতে হবে এবং তাদের সুযোগে সেট করতে হবে। সুতরাং আমার $filter('filter')কেবল এই পথে অ্যাক্সেস করার দরকার নেই । আমি নেটটিতে এখনও অবধি যে সমস্ত উদাহরণ পেয়েছি তার ফাংশনের অভ্যন্তরে স্থির মাপদণ্ড অনুসন্ধান রয়েছে, তারা অ্যারেতে প্রতিটি আইটেমের বিরুদ্ধে কোনও মানদণ্ডের বস্তু এবং পরীক্ষা পাস করে না।


4
আপনার ফিল্টার লাগবে কেন? সাধারণত ফিল্টারগুলি টেমপ্লেটগুলি থেকে ব্যবহৃত হয়। আপনি যদি কেবল সেখান থেকে এটি ব্যবহার করে থাকেন তবে আপনি কি আপনার নিয়ামকটিতে একটি সাধারণ কাজ করতে পারবেন না?
কেতন

অ্যারের প্রতিটি উপাদান ম্যানুয়ালি থ্রো করার পরিবর্তে, আমি ভেবেছিলাম যে আমরা
কৌণিকের

উত্তর:


174

আপনি এটি এর মতো ব্যবহার করতে পারেন: http://plnkr.co/edit/vtNjEgmpItqxX5fdwtPi?p=preview

আপনি filterযেমনটি পেয়েছেন তেমন , প্রিকেট ফাংশন গ্রহণ করে যা অ্যারে থেকে আইটেম দ্বারা আইটেম গ্রহণ করে। সুতরাং, আপনি কেবল প্রদত্ত উপর ভিত্তি করে একটি শিকারী ফাংশন তৈরি করতে হবে criteria

এই উদাহরণস্বরূপ, criteriaMatchএকটি ফাংশন যা প্রদত্তের সাথে মেলে এমন একটি প্রাকটিক ফাংশন প্রদান করে criteria

টেমপ্লেট:

<div ng-repeat="item in items | filter:criteriaMatch(criteria)">
  {{ item }}
</div>

সুযোগ:

$scope.criteriaMatch = function( criteria ) {
  return function( item ) {
    return item.name === criteria.name;
  };
};

আমি এই এইচটিএমএল থেকে এই মাপদণ্ডের ম্যাচ ফাংশনটি ব্যবহার করব না .. আমি কন্ট্রোলারের ভিতরে থেকে এটি কীভাবে বলব এটি সঠিক? $ ফিল্টার ('ফিল্টার') (অ্যারে, ফাংশন () {রিটার্ন মানদণ্ড ম্যাচ (আইটেম, মানদণ্ড);});
ব্যবহারকারীর 2368436

6
আপনি যদি এটি আপনার টেম্পলেটটিতে ব্যবহার না করে থাকেন তবে ফিল্টার সংজ্ঞায়িত করা আপনাকে কোনও সুবিধা দেয় না। আপনি কেবল একটি সাধারণ জাভাস্ক্রিপ্ট ফাংশনটি সংজ্ঞায়িত করতে পারেন, কারণ এটি এমনকি আরও ছোট। আপনি filterঅ্যারেতে নেটিভ পদ্ধতিটি ব্যবহার করতে পারেন :array.filter(function(item){return item.name === criteria.name;})
তোশ

আমি একটি জাভাস্ক্রিপ্ট ফাংশন আছে। কৌনিকের এটি করার সহজ উপায় না ছিল তা নিশ্চিত করতে চেয়েছিলেন .. আমি আপনার উত্তরটি গ্রহণ করব। ধন্যবাদ.
ব্যবহারকারী 2368436

2

আপনি কীভাবে filterআপনার AngularJS জাভাস্ক্রিপ্টের মধ্যে ব্যবহার করতে চান তার একটি উদাহরণ এখানে রয়েছে (কোনও HTML উপাদানগুলির চেয়ে) in

এই উদাহরণে, আমাদের কাছে দেশের রেকর্ডগুলির একটি অ্যারে রয়েছে, প্রত্যেকটির একটি নাম এবং একটি 3-বর্ণের আইএসও কোড রয়েছে।

আমরা একটি ফাংশন লিখতে চাই যা এই তালিকার মাধ্যমে একটি রেকর্ডের জন্য অনুসন্ধান করবে যা একটি নির্দিষ্ট 3-অক্ষর কোডের সাথে মেলে।

আমরা এটি ব্যবহার না করে কীভাবে করব তা এখানে filter:

$scope.FindCountryByCode = function (CountryCode) {
    //  Search through an array of Country records for one containing a particular 3-character country-code.
    //  Returns either a record, or NULL, if the country couldn't be found.
    for (var i = 0; i < $scope.CountryList.length; i++) {
        if ($scope.CountryList[i].IsoAlpha3 == CountryCode) {
            return $scope.CountryList[i];
        };
    };
    return null;
};

হ্যাঁ, এতে কোনও ভুল নেই।

তবে এখানে একই ফাংশনটি কীভাবে দেখাবে তা ব্যবহার করে filter:

$scope.FindCountryByCode = function (CountryCode) {
    //  Search through an array of Country records for one containing a particular 3-character country-code.
    //  Returns either a record, or NULL, if the country couldn't be found.

    var matches = $scope.CountryList.filter(function (el) { return el.IsoAlpha3 == CountryCode; })

    //  If 'filter' didn't find any matching records, its result will be an array of 0 records.
    if (matches.length == 0)
        return null;

    //  Otherwise, it should've found just one matching record
    return matches[0];
};

অনেক বেশি শুদ্ধ।

মনে রাখবেন যে filterফলস্বরূপ একটি অ্যারে প্রদান করে (মিলের রেকর্ডগুলির একটি তালিকা), সুতরাং এই উদাহরণে আমরা হয় 1 টি রেকর্ড, বা NULL ফিরে আসতে চাই।

আশাকরি এটা সাহায্য করবে.


0

অতিরিক্ত হিসাবে, আপনি যদি নিজের কন্ট্রোলারে ফিল্টারটি একইভাবে এখানে ব্যবহার করতে চান তবে:

<div ng-repeat="item in items | filter:criteriaMatch(criteria)">
  {{ item }}
</div>

আপনি যেমন কিছু করতে পারেন:

var filteredItems =  $scope.$eval('items | filter:filter:criteriaMatch(criteria)');

6
বিকল্পভাবে,var filteredItems = $filter('criteriaMatch')(items, criteria);
321zeno
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.