কৌণিক জেজে বস্তুর সম্পত্তি দ্বারা কীভাবে ফিল্টার করা যায়


139

আমি AngularJS এ একটি কাস্টম ফিল্টার তৈরি করার চেষ্টা করছি যা কোনও নির্দিষ্ট সম্পত্তির মান দ্বারা অবজেক্টের একটি তালিকা ফিল্টার করবে। এই ক্ষেত্রে, আমি "পোলারিটি" বৈশিষ্ট্য ("ধনাত্মক", "নিরপেক্ষ", "নেতিবাচক" এর সম্ভাব্য মান) দ্বারা ফিল্টার করতে চাই।

ফিল্টার ছাড়াই এখানে আমার কার্য কোড:

এইচটিএমএল:

<div class="total">
    <h2 id="totalTitle"></h2>
    <div>{{tweets.length}}</div>
    <div id="totalPos">{{tweets.length|posFilter}}</div>
    <div id="totalNeut">{{tweets.length|neutFilter}}</div>
    <div id="totalNeg">{{tweets.length|negFilter}}</div>
</div>

এখানে JSON ফর্ম্যাটে "$ સ્કોপ.টিউইটস" অ্যারে রয়েছে:

{{created_at: "Date", text: "tweet text", user:{name: "user name", screen_name: "user       screen name", profile_image_url: "profile pic"}, retweet_count: "retweet count", polarity: "Positive"},
 {created_at: "Date", text: "tweet text", user:{name: "user name", screen_name: "user screen name", profile_image_url: "profile pic"}, retweet_count: "retweet count", polarity: "Positive"},
 {created_at: "Date", text: "tweet text", user:{name: "user name", screen_name: "user screen name", profile_image_url: "profile pic"}, retweet_count: "retweet count", polarity: "Positive"}}

আমি সেরা ফিল্টারটি নিম্নলিখিত হিসাবে নিয়ে আসতে পারি:

myAppModule.filter('posFilter', function(){
return function(tweets){
    var polarity;
    var posFilterArray = [];
    angular.forEach(tweets, function(tweet){
        polarity = tweet.polarity;
        console.log(polarity);
        if(polarity==='Positive'){
              posFilterArray.push(tweet);
        }
        //console.log(polarity);
    });
    return posFilterArray;
};
});

এই পদ্ধতিটি খালি অ্যারে প্রদান করে। এবং "কনসোল.লগ (পোলারিটি)" স্টেটমেন্ট থেকে কিছুই মুদ্রিত হয় না। দেখে মনে হচ্ছে আমি "পোলারিটি" এর অবজেক্ট সম্পত্তি অ্যাক্সেস করার জন্য সঠিক পরামিতিগুলি সন্নিবেশ করছি না am

কোন ধারনা? আপনার প্রতিক্রিয়া প্রশংসিত হয়।


3
দুর্দান্ত প্রশ্ন, তবে কোড হ্রাস করা যেতে পারে, এর বড় অংশটি প্রশ্নের সাথে প্রাসঙ্গিক নয়।
সেটেক

উত্তর:


218

আপনাকে কেবল filterফিল্টারটি ব্যবহার করতে হবে ( ডকুমেন্টেশন দেখুন ):

<div id="totalPos">{{(tweets | filter:{polarity:'Positive'}).length}}</div>
<div id="totalNeut">{{(tweets | filter:{polarity:'Neutral'}).length}}</div>
<div id="totalNeg">{{(tweets | filter:{polarity:'Negative'}).length}}</div>

Fiddle


1
এনজি-রিপিটেট স্টেটমেন্টের বাইরের কোনও এনজি-ক্লিক ইভেন্টে একটি কাস্টম ফিল্টার কেটে আইটেম তালিকা ফিল্টার করার কোনও উপায় আছে কি? এই ক্ষেত্রে, আমি ফলাফলের উপরে তিনটি "পোলারিটি" বোতাম রাখতে চাই যা রেটিংয়ের উপর ভিত্তি করে ফিল্টার করে।
sh3nan1gans

2
আমি বুঝতে পারছি না। আপনি যদি ফিল্টার করার জন্য পোলারিটিটি চয়ন করতে চান, আপনি একটি সরল পাঠ্যের পরিবর্তে স্কোপ ভেরিয়েবলটি পাস করতে পারেন: filter:{polarity:polarityToFilter}যেখানে $scope.polarityToFilterতিনটি বোতামের একটিতে ক্লিক দ্বারা পূরণ করা হয়। এই আপনি কি করতে চেষ্টা করছেন?
ব্ল্যাকহোল

মনে হচ্ছে এটি কাজ করতে পারে। তবে, আমার অ্যাপ্লিকেশনটিতে পৃথক তালিকা আইটেমগুলি মুছতে সক্ষম হওয়া দরকার।
sh3nan1gans

ফিল্টারিংয়ের ক্ষেত্রে সমস্যাটি হ'ল প্রতিবারই যখন একটি ফিল্টার প্রয়োগ করা হয় তখন একটি নতুন অ্যারে তৈরি করা হয় যা ফিল্টার করা আইটেম এবং আনফিল্টারযুক্ত অ্যারেতে এর মূল সূচকের মধ্যে টাই ভেঙে দেয়। টাই বজায় রাখার কোন উপায় আছে বা আমার একমাত্র বিকল্পটি এনজি-লুকোচ্ছে? এনজি-হাইড ব্যবহার করে ফিল্টারিংয়ের বিকল্পের জন্য এখানে একটি টিউটোরিয়াল দেওয়া হয়েছে: bennadel.com/blog/…
sh3nan1gans

এনজিআরপিট$index স্থানীয় স্কোপগুলিতে একটি যথাযথ প্রকাশ করে যা আপনিও ব্যবহার করতে পারেন।
ব্ল্যাকহোল

27

ডকুমেন্টেশন সম্পূর্ণ উত্তর আছে। যাইহোক এটি এইভাবে হয়:

<input type="text" ng-model="filterValue">
<li ng-repeat="i in data | filter:{age:filterValue}:true"> {{i | json }}</li>

শুধুমাত্র ফিল্টার করবে ageমধ্যে dataঅ্যারে এবং trueসঠিক মিল জন্য।

গভীর ফিল্টারিংয়ের জন্য,

<li ng-repeat="i in data | filter:{$:filterValue}:true"> {{i}}</li>

$গভীর ফিল্টার জন্য একটি বিশেষ সম্পত্তি এবং trueউপরে মত সঠিক মিল জন্য।


সহজ এবং পরিষ্কার।
scaryguy

এই ফিল্টারটি অন্তর্নির্মিত বা উভয় এবং কৌণিক জেএস উভয়ই লেখা দরকার?
পি সতীশ প্যাট্রো

23

এটিকে আরও গতিশীল করার জন্য আপনি এটিও করতে পারেন।

<input name="filterByPolarity" data-ng-model="text.polarity"/>

তারপরে আপনি এনজি-রিপিট দেখতে পাবেন

<div class="tweet" data-ng-repeat="tweet in tweets | filter:text"></div>

এই ফিল্টার অবশ্যই polarity দ্বারা ফিল্টার করতে ব্যবহৃত হবে


5

আমাদের নীচের মতো সংগ্রহ রয়েছে:


এখানে চিত্র বর্ণনা লিখুন

বাক্য গঠন:

{{(Collection/array/list | filter:{Value : (object value)})[0].KeyName}}

উদাহরণ:

{{(Collectionstatus | filter:{Value:dt.Status})[0].KeyName}}

-অথবা-

বাক্য গঠন:

ng-bind="(input | filter)"

উদাহরণ:

ng-bind="(Collectionstatus | filter:{Value:dt.Status})[0].KeyName"

4

আপনি এটি চেষ্টা করতে পারেন। এটি আমার 'নাম' এর জন্য কাজ করা আরআর সম্পত্তি property

repeat="item in (tagWordOptions | filter:{ name: $select.search } ) track by $index
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.