AngularJS এর ​​সাথে তালিকা বিভাজক হিসাবে কমা ব্যবহার করা Using


179

আমার আইটেমগুলির একটি কমা-বিচ্ছিন্ন তালিকা তৈরি করতে হবে:

  <li ng-repeat="friend in friends">
      <b ng-repeat="email in friend.email">{{email}}{{$last ? '' : ', '}}</b>...
  </li>

অ্যাঙ্গুলারজেএস ডকুমেন্টেশন অনুসারে, কোনও নিয়ন্ত্রণ প্রবাহ বিবৃতি প্রকাশে অনুমোদিত নয়। এই কারণেই আমার {{$last ? '' : ', '}}কাজ হয় না।

কমা-বিচ্ছিন্ন তালিকা তৈরির বিকল্প উপায় আছে কি?

সম্পাদনা 1 এর
চেয়ে সহজ কিছু আছে:

<span ng-show="!$last">, </span>

5
আপনি সর্বদা (পরে আপনি পরিবর্তন এইচটিএমএল যখন আপনার বসের পৃথক লাইন ইত্যাদি তাদের চায় প্রয়োজন হবে না) এই ভাবে বিন্যাস তালিকাতে সিএসএস ব্যবহার করতে পারেন - দেখুন stackoverflow.com/questions/1517220/...
AlexFoxGill

উত্তর:


337

আপনি এটি এইভাবে করতে পারেন:

<b ng-repeat="email in friend.email">{{email}}{{$last ? '' : ', '}}</b>

.. তবে আমি ফিলিপের উত্তরটি পছন্দ করি :-)


($last && '' || ', ')সবসময় ফলন করা উচিত নয় ', '?
Okm

15
ঠিক আছে ওকামের মতো, আমি সঠিকভাবে মূল্যায়নের জন্য কৌনিকটি পাইনি a শেষ পর্যন্ত সত্য বা মিথ্যা কোনও টেম্পলেটের মধ্যে। আমি এই ব্যবহৃত: {{{true: '', false: ', '}[$last]}}। এই কৌশলটি ব্যবহারের চেয়ে আরও নমনীয় .joinকারণ এটি তালিকার উপাদানগুলিকে প্রতিটি অ্যারের সদস্য হতে দেয়, যেমন:<b ng-repeat="friend in friends">{{friend.email}}{{{true: '', false: ', '}[$last]}}</b>
রায়ান মার্কাস

3
টার্নারি অপারেটরগুলি ব্যবহার করার জন্য আপডেট হয়েছে
অ্যান্ড্রু জোসলিন

1
আমি কীভাবে printedোকাতে এবং মুদ্রিত অ্যারেটিতে যাতে আমার অ্যারেটি দেখতে এমন লাগে: জন, মাইক এবং নীল। নির্দেশ ব্যবহার না করে এই ফর্ম্যাটটি কীভাবে পাবেন।
মাত্যা

আমি এই পদ্ধতির ব্যবহার করছি যেহেতু এটি আমাকে তালিকার প্রতিটি মানের একটি ফিল্টার ব্যবহার করতে দেয়।
সি ফেয়ারওয়েদার

231

join(separator)অ্যারেগুলির জন্য কেবল জাভাস্ক্রিপ্টের অন্তর্নির্মিত ফাংশনটি ব্যবহার করুন:

<li ng-repeat="friend in friends">
  <b>{{friend.email.join(', ')}}</b>...
</li>

21
আপনি যদি এইচটিএমএল-ইশ বিভাজক চান তবে সম্ভবত এটি লেখার নির্দেশের সময় । আপনি এইচটিএমএলকে join()এইচটিএমএল এড়িয়ে চলা নিষ্ক্রিয় করতে পারেন , তবে এর জন্য জাহান্নামের একটি বিশেষ জায়গা রয়েছে;)
ফিলিপ রেচার্ট

ভাল লাগল, আমি এটিকে এভাবে ব্যবহার করার কথা ভাবিনি।
স্ট্রবেরি

@DavidKEgghead আমি পৃথক, প্রার্থনা করা jsfiddle.net/wuZRA । এটি আপনার পক্ষে কীভাবে কাজ করে না?
ফিলিপ রেচার্ট

2
@ ফিলিপ রিচার্ট এই বিলম্বের জন্য দুঃখিত এখানে একটি উদাহরণ রয়েছে: jsfiddle.net/Sek8F - দেখে মনে হচ্ছে আপনি কোনও স্ট্রিংকে লক্ষ্য করছেন যেখানে আমি কোনও বস্তুর উল্লেখ করছি।
রবি রাম

101

এছাড়াও:

angular.module('App.filters', [])
    .filter('joinBy', function () {
        return function (input,delimiter) {
            return (input || []).join(delimiter || ',');
        };
    });

এবং টেমপ্লেটে:

{{ itemsArray | joinBy:',' }}

11
এই উত্তরটি "কৌণিক উপায়" দেখায় এবং সেরা হিসাবে চিহ্নিত করা উচিত।
ইউজিন গ্রিয়াজনভ

14
ছয়টি লাইন সংরক্ষণ করুন এবং শুধু না {{ itemsArray.join(', ') }}কেন?
ফিলিপ রেচার্ট

12
আমি নিশ্চিত নই যে অ্যাঙ্গুলারজেএস-এ জাভাস্ক্রিপ্ট মূল ফাংশনগুলি পুনরায় লেখাই সত্যই "কৌণিক উপায়ে" ...
মাইকেল কোল

1
এই উত্তরটি দেখায় যে কৌণিক কীভাবে বস্তুর অ্যারেগুলির জন্য মূল্য যুক্ত করতে পারে
মাইকেল কোল

41

.list-comma::before {
  content: ',';
}
.list-comma:first-child::before {
  content: '';
}
<span class="list-comma" ng-repeat="destination in destinations">
                            {{destination.name}}
                        </span>


1
এটি "সিমেন্টিক" উপায়ে মনে হয়, কারণ কমা-বিচ্ছিন্ন তালিকা ব্যবহারের পছন্দটি পুরোপুরি উপস্থাপনা সম্পর্কিত। এটি ঠিক পাশাপাশি একটি উপ তালিকা হতে পারে।
এলিয়ট ক্যামেরন

এটি আমার মনে প্রথম সমাধান ছিল। জাভাস্ক্রিপ্টের উপর কম নির্ভরশীল।
কল্পনা পঞ্চাল

10

এটিও ঠিক করতে আপনি সিএসএস ব্যবহার করতে পারেন

<div class="some-container">
[ <span ng-repeat="something in somethings">{{something}}<span class="list-comma">, </span></span> ]
</div>

.some-container span:last-child .list-comma{
    display: none;
}

তবে অ্যান্ডি জোসলিনের উত্তর সবচেয়ে ভাল

সম্পাদনা: আমি আমার মন পরিবর্তন করেছি আমাকে সম্প্রতি এটি করতে হয়েছিল এবং আমি একটি যোগদান ফিল্টার দিয়ে শেষ করেছি।


2
আমিও একটি কাস্টম ফিল্টারের জন্য যেতে চাই, তবে আমি আপনার ধারণাটি পছন্দ করি :)
জেবিসি

5

আমি মনে করি এটি ব্যবহার করা ভাল ng-ifng-showএর মধ্যে একটি উপাদান তৈরি করে domএবং সেট করে display:nonedomআপনার সংখ্যার যত বেশি সংখ্যক উপাদান ক্ষুধার্ত রয়েছে সেগুলি আপনার অ্যাপ্লিকেশন হয়ে যায় এবং নিম্ন সংস্থানযুক্ত ডিভাইসগুলিতে কম domউপাদানগুলি তত ভাল।

টিবিএইচ <span ng-if="!$last">, </span>এটি করার দুর্দান্ত উপায় বলে মনে হচ্ছে। ইহা সহজ.


আমি এই পদ্ধতির পছন্দ করি, কারণ এটি সহজ এবং এখনও এইচটিএমএল ভিত্তিক বিভাজককে সমর্থন করে। ধন্যবাদ @ the7erm!
alexkb

2

যেহেতু এই প্রশ্নটি বেশ পুরানো এবং অ্যাংুলার জেএসের তখন থেকেই বিকশিত হওয়ার সময় ছিল, এখন এটি ব্যবহার করে সহজেই অর্জন করা যেতে পারে:

<li ng-repeat="record in records" ng-bind="record + ($last ? '' : ', ')"></li>

নোট করুন যে আমি ngBindইন্টারপোলেশন পরিবর্তে ব্যবহার করছি {{ }}কারণ এটি আরও বেশি পারফরম্যান্ট: ngBind কেবল তখনই চলবে যখন উত্তীর্ণিত মানটি পরিবর্তিত হয়। {{ }}অন্যদিকে বন্ধনীগুলি অপরিশোধিত হবে এবং প্রতিটি ডাইজেস্টে তা রিফ্রেশ হবে, এটি প্রয়োজনীয় না হলেও। সূত্র: এখানে , এখানে এবং এখানে

angular
  .module('myApp', [])
  .controller('MyCtrl', ['$scope',
    function($scope) {
      $scope.records = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    }
  ]);
li {
  display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MyCtrl">
  <ul>
    <li ng-repeat="record in records" ng-bind="record + ($last ? '' : ', ')"></li>
  </ul>
</div>

একটি চূড়ান্ত নোটে, এখানের সমস্ত সমাধান কাজ করে এবং আজ অবধি বৈধ। আমি সত্যিই সিএসএসের সাথে জড়িতদের কাছে সত্যিই পেয়েছি কারণ এটি উপস্থাপনের বিষয় হিসাবে বেশি।


1

আমি সিম্বুর পদ্ধতির পছন্দ করি তবে আমি প্রথম বাচ্চা বা শেষ সন্তান ব্যবহার করতে স্বাচ্ছন্দ্য বোধ করি না। পরিবর্তে আমি কেবল পুনরাবৃত্তি তালিকা-কমা ক্লাসের সামগ্রীটি সংশোধন করি।

.list-comma + .list-comma::before {
    content: ', ';
}
<span class="list-comma" ng-repeat="destination in destinations">
    {{destination.name}}
</span>

0

আপনি যদি মানগুলিকে সীমাবদ্ধ করার জন্য এনজি-শো ব্যবহার করে থাকেন তবে {{$last ? '' : ', '}}এটি কার্যকর হবে না কারণ এটি এখনও সমস্ত মান বিবেচনায় নেবে x উদাহরণ

<div ng-repeat="x in records" ng-show="x.email == 1">{{x}}{{$last ? '' : ', '}}</div>

var myApp = angular.module("myApp", []);
myApp.controller("myCtrl", function($scope) {
  $scope.records = [
    {"email": "1"},
    {"email": "1"},
    {"email": "2"},
    {"email": "3"}
  ]
});

"শেষ" মানের পরে কমা যুক্ত করার ফলাফল , এনজি-শো দিয়ে এটি এখনও সমস্ত 4 টি মান বিবেচনা করে

{"email":"1"},
{"email":"1"},

একটি সমাধান হ'ল এনজি-রিপিটে সরাসরি একটি ফিল্টার যুক্ত করা

<div ng-repeat="x in records | filter: { email : '1' } ">{{x}}{{$last ? '' : ', '}}</div>

ফলাফল

{"email":"1"},
{"email":"1"}

কাস্টম পাইপ না তৈরি করে কৌনিক 2 তে এই সমস্যাটি কীভাবে একইভাবে সমাধান করা যায় সে সম্পর্কে কোনও পরামর্শ?
চেনু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.