কৌণিক এনজি-রিপিট কোনও আইটেমের সাথে অভিব্যক্তি মেলে ip


91

আমি এনজি-রিপিটে কোনও আইটেমটি মূলত কোনও অভিব্যক্তির সাথে মিলে গেলে মূলত কৌনিকটি বলার একটি উপায় অনুসন্ধান করছি continue;

নিয়ামক ইন:

$scope.players = [{
    name_key:'FirstPerson', first_name:'First', last_name:'Person'
}, {
    name_key:'SecondPerson', first_name:'Second', last_name:'Person'
}]

এখন আমার টেম্পলেটটিতে আমি মেলে না এমন সবাইকে দেখাতে চাই name_key='FirstPerson'। আমি অনুভব করেছি এটি ফিল্টার হতে হবে তাই আমি এটির সাথে চারপাশে খেলতে একটি Plunkr সেটআপ করেছি তবে কোনও ভাগ্য হয়নি। Plunkr প্রয়াস


আমি বোঝার চেষ্টা করি: আপনি কি সমস্ত আইটেম প্রদর্শন করতে চান তবে বিন্দুতে কে মিলছে এবং কে নয়? বা শুধু ফিল্টার?
ম্যাক্সিম শৌস্টিন

উত্তর:


144

হিসাবে @Maxim Shoustin প্রস্তাব, অর্জন করার সেরা উপায় কি যদি আপনি একটি কাস্টম ফিল্টার ব্যবহার করতে হবে না।
তবে অন্যান্য উপায় আছে, তাদের মধ্যে একটির জন্য ng-ifএকই উপাদানটিতে নির্দেশনাটি ব্যবহার করা হ'ল আপনি কি নির্দেশিকাটি রেখেছিলেন ng-repeat(এছাড়াও, এখানে নিমজ্জনকারীও ):

<ul>
    <li ng-repeat="player in players" ng-if="player.name_key!='FirstPerson'"></li>
</ul>

এটি কোনও প্রাকৃতিক দৃষ্টিকোণ থেকে একটি সামান্য অসুবিধা উপস্থাপন করতে পারে তবে এর একটি বড় সুবিধা রয়েছে যে আপনার ফিল্টারিং এমন কোনও নিয়মের ভিত্তিতে হতে পারে যা playersঅ্যারের সাথে মিলিতভাবে আঁটসাঁট নয় এবং এটি সহজেই আপনার অ্যাপ্লিকেশনটির স্কোপে অন্য ডেটা অ্যাক্সেস করতে পারে:

  <li 
      ng-repeat="player in players" 
      ng-if="app.loggedIn && player.name != user.name"
  ></li>

আপডেট
হিসাবে বলা হয়েছে, এটি এই ধরণের সমস্যার সমাধানগুলির মধ্যে একটি এবং এটি আপনার প্রয়োজন অনুসারে বা নাও পারে।
মন্তব্যে ng-ifনির্দেশিত হিসাবে, একটি নির্দেশিকা, যার প্রকৃত অর্থ এটি আপনার প্রত্যাশার তুলনায় পটভূমিতে আরও কিছু করতে পারে।
উদাহরণস্বরূপ, ng-if এটির পিতা-মাতার কাছ থেকে একটি নতুন সুযোগ তৈরি করে :

প্রোটোটাইপাল উত্তরাধিকার ব্যবহার করে এনজিআইফের মধ্যে তৈরি স্কোপটি তার মূল স্কোপ থেকে উত্তরাধিকার সূত্রে আসে।

এটি সাধারণত স্বাভাবিক আচরণকে প্রভাবিত করে না তবে অপ্রত্যাশিত ঘটনাগুলি রোধ করার জন্য, প্রয়োগ করার আগে আপনার এটি মনে রাখা উচিত।


এটি ঠিক আমি যা খুঁজছিলাম, জানতাম কাস্টম ফিল্টার ছাড়াই এটি করার কিছু ছোট এবং মিষ্টি উপায় থাকতে হবে। ধন্যবাদ!
aron.duby

দ্রষ্টব্য: এনজি-এর কিছু স্কোপ আচরণ রয়েছে - যদি এটি জটিল হয়। আমি এই পদ্ধতিটি চেষ্টা করেছি এবং এটি অন্য কোথাও সমস্যা সৃষ্টি করেছে। যথা, আমার কাছে একটি "প্রহরী" নির্দেশিকা রয়েছে যা পুনরাবৃত্তি শেষ হওয়ার পরে একটি ইভেন্ট সম্প্রচার করে। এই পুনরাবৃত্তিতে এনজি-ইফ যোগ করার পরে এটি আর সেই ইভেন্টটিকে বহিস্কার করবে না। একটি কাস্টম ফিল্টার আসলে যেতে সবচেয়ে পরিষ্কার উপায় হতে পারে।
মৃত্তিকাশপী

আপনি ক্লেউইচকি কি ঠিক বলেছেন, সবচেয়ে পরিষ্কার উপায়টি একটি ফিল্টার ব্যবহার করছে তবে এটি সমস্ত ক্ষেত্রে উপযুক্ত নয়। যাইহোক, মন্তব্যটির জন্য THX এবং আপনি দেখতে পাচ্ছেন যে আমি কেবলমাত্র ফিল্টারিং ডেটার জন্য নির্দেশিকা ব্যবহারের প্রভাব সম্পর্কে যে কাউকে সচেতন করতে উত্তরে একটি শীর্ষস্থানীয় আপডেট যোগ করেছি ।
gion_13

43

আমি জানি এটি একটি পুরানো, তবে কেউ যদি অন্য সম্ভাব্য সমাধানের সন্ধান করতে পারে তবে সমাধান করার জন্য এখানে আরও একটি উপায় রয়েছে - মানক ফিল্টার কার্যকারিতা ব্যবহার করুন :

অবজেক্ট: একটি প্যাটার্ন অবজেক্ট অ্যারে দ্বারা অন্তর্ভুক্ত থাকা সামগ্রীতে নির্দিষ্ট বৈশিষ্ট্যগুলি ফিল্টার করতে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ {নাম: "এম", ফোন: "1"} প্রিকেট আইটেমের একটি অ্যারে ফিরিয়ে দেবে যেখানে "এম" সম্বলিত সম্পত্তির নাম এবং "1" সম্বলিত সম্পত্তি ফোন রয়েছে। ... এর সাথে স্ট্রিংটির উপসর্গ রেখে প্রিনিকেটটিকে উপেক্ষা করা যেতে পারে! উদাহরণস্বরূপ {নাম: "! এম"} প্রিকেট আইটেমের একটি অ্যারে ফিরিয়ে দেবে যার সম্পত্তির নাম "এম" নেই।

তাই টিএস উদাহরণের জন্য এর মতো কিছু করা উচিত:

<ul>
    <li ng-repeat="player in players | filter: { name_key: '!FirstPerson' }"></li>
</ul>

কাস্টম ফিল্টার লেখার দরকার নেই, ng-ifএটির নতুন সুযোগটি ব্যবহার করার দরকার নেই ।


বিন্দু সহজ। লেখক হিসাবে কোনও কাস্টম ফিল্টার বা নতুন সুযোগ তৈরি করা হয়নি। একটি তালিকায় একক মান বাদ দেওয়ার জন্য উপযুক্ত।
এমবোকিল

আমি মনে করি আপনাকে 'প্লেয়ার' নামটি 'প্লেয়ার.নেম_কি' থেকে বাদ দিতে হবে - সুতরাং এটি উপরের উদাহরণে কেবল "{নাম_কি: '! ফার্স্ট পার্সন'।" হবে।
স্মিথএমএল

আমি কখনই খালি কী দিয়ে অ্যাংুলারকে সুন্দর খেলতে পারি না। এর সমতুল্য অন্তর্নির্মিত ফিল্টারগুলি ব্যবহার করার জন্য কি কোনও কৌশল আছে player in players | filter: { name_key: '' }? এই নির্দিষ্ট নির্দেশটি কেবল খালি / খালি খেলোয়াড়ের সাথে মেলে না name_key। বিপরীত, name_key: '!'খালি name_keyনয় এমন কোনও প্লেয়ার নির্বাচন করার উদ্দেশ্যে এটি কাজ করবে না।
এরিক এল।

আপনি এই উত্তরটি চেক করতে পারেন ।
ইলিয়া লুজানিন

4
সাবধান হন যে এটি কেবল অ্যারেগুলির সাথেই কাজ করে, কোনও ক্ষেত্রে যেমন অবজেক্ট প্রোপার্টি দিয়ে নয়ng-repeat="(key, val) in player"
ডেভিড ডিয়েজ

19

আপনি প্রয়োগ করার সময় আপনি কাস্টম ফিল্টার ব্যবহার করতে পারেন ng-repeat। কিছুটা এইরকম:

 data-ng-repeat="player in players |  myfilter:search.name

myfilter.js:

app.filter('myfilter', function() {


   return function( items, name) {
    var filtered = [];

    angular.forEach(items, function(item) {

      if(name == undefined || name == ''){
        filtered.push(item);
        }

      /* only if you want start With*/
      // else if(item.name_key.substring(0, name.length) !== name){
      //   filtered.push(item);
      // }

      /* if you want contains*/
      // else if(item.name_key.indexOf(name) < 0 ){
      //   filtered.push(item);
      // }

       /* if you want match full name*/
       else if(item.name_key !== name ){
        filtered.push(item);
      }
    });

    return filtered;
  };
});

ডেমো Plunker


আপনি যে কাজের জন্য রেখেছেন তাতে ধন্যবাদ এটি অবশ্যই সঠিক তবে আমি কোডটিতে @ জিওন_13 উত্তর সহজেই দিয়ে শেষ করেছি তাই আমি অনুভব করেছি যে আমি তাকে গ্রহণযোগ্য উত্তর হিসাবে ভাল হিসাবে চিহ্নিত করব
aron.duby
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.