Angular2 এ পাঠ্য কেটে যাবে কীভাবে?


126

কোনও উপায় আছে যে আমি স্ট্রিংয়ের দৈর্ঘ্যকে একটি সংখ্যা অক্ষরে সীমাবদ্ধ করতে পারি? যেমন: আমাকে একটি শিরোনামের দৈর্ঘ্য 20 এর মধ্যে সীমাবদ্ধ করতে হবে {{ data.title }}

দৈর্ঘ্য সীমাবদ্ধ করার জন্য কোনও পাইপ বা ফিল্টার রয়েছে?

উত্তর:


380

কৌনিকতে পাঠ্য কেটে ফেলার দুটি উপায়।

let str = 'How to truncate text in angular';

1. সমাধান

  {{str | slice:0:6}}

আউটপুট:

   how to

আপনি যদি স্লাইস স্ট্রিংয়ের পরে কোনও পাঠ্য সংযোজন করতে চান

   {{ (str.length>6)? (str | slice:0:6)+'..':(str) }}

আউটপুট:

 how to...

2. সমাধান (কাস্টম পাইপ তৈরি করুন)

আপনি যদি কাস্টম কাটা কাটা পাইপ তৈরি করতে চান

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
 name: 'truncate'
})

export class TruncatePipe implements PipeTransform {

transform(value: string, args: any[]): string {
    const limit = args.length > 0 ? parseInt(args[0], 10) : 20;
    const trail = args.length > 1 ? args[1] : '...';
    return value.length > limit ? value.substring(0, limit) + trail : value;
   }
}

মার্কআপে

{{ str | truncate:[20] }} // or 
{{ str | truncate:[20, '...'] }} // or

একটি মডিউল এন্ট্রি যোগ করতে ভুলবেন না।

@NgModule({
  declarations: [
    TruncatePipe
  ]
})
export class AppModule {}

পারফরম্যান্সে কোন সমাধানটি ভাল। সমাধান 1 বা সমাধান 2. আমার মনে হয় সমাধান 1 পারফরম্যান্সে ভাল।
রিগিন ওমেন

আপনি হয়ত রিটার্নের বিবৃতিতে একটি নাল চেক যুক্ত করতে চান, আমার ক্ষেত্রে আমি একটি খালি স্ট্রিংয়ে যাচ্ছিলাম এবং এটি আমার অ্যাপ্লিকেশনটি ক্র্যাশ করছে। return value && value.length > limit ? value.substring(0, limit) + trail : value;
ওয়াইল্ডহ্যামার

@ স্ক্যান: স্যার আমি উভয়ের সমাধানটি পুরোপুরিভাবে কাজ করার চেষ্টা করেছি তবে আমার পরিস্থিতি ভিন্ন we
কপিল সোনি

সমাধান 2-তে transform(value: string, args: string[]): stringহওয়া উচিত , transform(value: string, args: any[]): stringযেহেতু পাইপকে দেওয়া প্রথম যুক্তিটি একটি সংখ্যা।
ম্যাটঅোনেক্স

: হাই Ketan, আপনি এই উত্তর দিতে দয়া করে করতে পারেন stackoverflow.com/questions/61040964/...
Tanzeel

83

সঙ্গে truncate পাইপ ঐচ্ছিক প্যারাম:

  • সীমা - স্ট্রিং সর্বাধিক দৈর্ঘ্য
  • completeWords ওয়ার্ডস - চরিত্রের পরিবর্তে নিকটতম সম্পূর্ণ শব্দের উপরে কাটা পতাকা
  • উপবৃত্তাকার - সংযোজনীয় প্রত্যয়

-

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'truncate'
})
export class TruncatePipe implements PipeTransform {
  transform(value: string, limit = 25, completeWords = false, ellipsis = '...') {
    if (completeWords) {
      limit = value.substr(0, limit).lastIndexOf(' ');
    }
    return value.length > limit ? value.substr(0, limit) + ellipsis : value;
  }
}

একটি মডিউল এন্ট্রি যোগ করতে ভুলবেন না।

@NgModule({
  declarations: [
    TruncatePipe
  ]
})
export class AppModule {}

ব্যবহার

উদাহরণ স্ট্রিং:

public longStr = 'A really long string that needs to be truncated';

মার্কআপ:

  <h1>{{longStr | truncate }}</h1> 
  <!-- Outputs: A really long string that... -->

  <h1>{{longStr | truncate : 12 }}</h1> 
  <!-- Outputs: A really lon... -->

  <h1>{{longStr | truncate : 12 : true }}</h1> 
  <!-- Outputs: A really... -->

  <h1>{{longStr | truncate : 12 : false : '***' }}</h1> 
  <!-- Outputs: A really lon*** -->

7
পাইপ সরবরাহ করার জন্য ধন্যবাদ, যদিও limit = value.substr(0, 13).lastIndexOf(' ');হওয়া উচিত limit = value.substr(0, limit).lastIndexOf(' ');
টমনার

1
আপনি এর if (!value) { return ''; }if (value.length <= limit) { return value; }
মতোও

এটি কাজ করার জন্য আমাকে @ngModule এর রফতানি অংশে যুক্ত করতে হয়েছিল। কেন নিশ্চিত নয়
তবি

এটি একটি নতুন উপাদানগুলির মতো @ টিবি এবং এটি ব্যবহারের জন্য আপনাকে এটি ঘোষণার (ঘোষণার অ্যারে) প্রয়োজন।
ক্যালিওস

1
অপ্রয়োজনীয় মানগুলিতে উপবৃত্তাকার যুক্ত এড়াতে এড়াতে `if (value.length <সীমা) {ফেরতের মান যুক্ত করুন; } অন্য {ফিরে ${value.substr(0, limit)}${ellipsis}; } `
jabu.hlong

14

আপনি CSS এর উপর ভিত্তি করে পাঠ্য কেটে ফেলতে পারেন। এটি কোনও পাঠ্য-ভিত্তিক প্রস্থের ঠিক না করা অক্ষরকে ছাঁটাই করতে সহায়তা করে।

উদাহরণ

সিএসএস

.truncate {
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }

.content {
            width:100%;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }

এইচটিএমএল

<div class="content">
    <span class="truncate">Lorem Ipsum is simply dummied text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</span>
</div>

দ্রষ্টব্য: এই কোডটি এক লাইনের জন্য পূর্ণরূপে একের বেশি নয়।

আপনি যদি কৌণিক দ্বারা এটি করতে চান তবে কেটনের সমাধান ভাল


2
এই. এক হাজার বার!
brunner

অ্যাক্সেসযোগ্যতার জন্য উপযুক্ত
অ্যান্টোনেলো প্যাসেলা

4

আমি এই মডিউলটি এনজি 2 কেটেঙ্কেট ব্যবহার করছি , এটির বেশ সহজ, আমদানি মডিউল এবং আপনি যেতে প্রস্তুত ... {{data.title | কাটা: 20}


তা এখানে প্রবর্তন হল: npmjs.com/package/@yellowspot/ng-truncate
ত্বীবী

আমার পরীক্ষাগুলি এটি আমদানির পরে ব্যর্থ হয়েছিল। ঠাট্টার কিছু তারযুক্ত ত্রুটি ছিল।
তবি

@ টিবি কি ধরণের ত্রুটি? আমার জন্য এটি খুব সহজ ছিল, ইনস্টল করুন> মডিউলটি আমদানি করুন> এর উপাদানগুলিতে ব্যবহার করুন ..
কেরিম092

3

মার্কআপের interfaceমধ্য দিয়ে পাস করার জন্য একটি বিকল্প অবজেক্টের আকৃতি বর্ণনা করতে একটি ব্যবহার করে এখানে একটি বিকল্প পদ্ধতির উপায় রয়েছে pipe

@Pipe({
  name: 'textContentTruncate'
})
export class TextContentTruncatePipe implements PipeTransform {

  transform(textContent: string, options: TextTruncateOptions): string {
    if (textContent.length >= options.sliceEnd) {
      let truncatedText = textContent.slice(options.sliceStart, options.sliceEnd);
      if (options.prepend) { truncatedText = `${options.prepend}${truncatedText}`; }
      if (options.append) { truncatedText = `${truncatedText}${options.append}`; }
      return truncatedText;
    }
    return textContent;
  }

}

interface TextTruncateOptions {
  sliceStart: number;
  sliceEnd: number;
  prepend?: string;
  append?: string;
}

তারপরে আপনার মার্কআপে:

{{someText | textContentTruncate:{sliceStart: 0, sliceEnd: 50, append: '...'} }}


1

আপনি যদি কয়েকটি শব্দ দ্বারা ছাঁটাই করতে চান এবং একটি উপবৃত্ত যোগ করতে পারেন তবে আপনি এই ফাংশনটি ব্যবহার করতে পারেন:

truncate(value: string, limit: number = 40, trail: String = '…'): string {
  let result = value || '';

  if (value) {
    const words = value.split(/\s+/);
    if (words.length > Math.abs(limit)) {
      if (limit < 0) {
        limit *= -1;
        result = trail + words.slice(words.length - limit, words.length).join(' ');
      } else {
        result = words.slice(0, limit).join(' ') + trail;
      }
    }
  }

  return result;
}

উদাহরণ:

truncate('Bacon ipsum dolor amet sirloin tri-tip swine', 5, '…')
> "Bacon ipsum dolor amet sirloin…"

থেকে নেওয়া: https://github.com/yellowspot/ng2-truncate/blob/master/src/truncate-words.pipe.ts

আপনি যদি অনেকগুলি অক্ষর দ্বারা ছাঁটাই করতে চান তবে শব্দগুলি কেটে নাও এটি ব্যবহার করুন:

truncate(value: string, limit = 25, completeWords = true, ellipsis = '…') {
  let lastindex = limit;
  if (completeWords) {
    lastindex = value.substr(0, limit).lastIndexOf(' ');
  }
  return `${value.substr(0, limit)}${ellipsis}`;
}

উদাহরণ:

truncate('Bacon ipsum dolor amet sirloin tri-tip swine', 19, true, '…')
> "Bacon ipsum dolor…"

truncate('Bacon ipsum dolor amet sirloin tri-tip swine', 19, false, '…')
> "Bacon ipsum dolor a…"

1

সবেমাত্র টিমোথি পেরেজের উত্তর চেষ্টা করে একটি লাইন যুক্ত করলেন

if (value.length < limit)
   return `${value.substr(0, limit)}`;

প্রতি

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'truncate'
})
export class TruncatePipe implements PipeTransform {
transform(value: string, limit = 25, completeWords = false, ellipsis = '...') {

   if (value.length < limit)
   return `${value.substr(0, limit)}`;

   if (completeWords) {
     limit = value.substr(0, limit).lastIndexOf(' ');
   }
   return `${value.substr(0, limit)}${ellipsis}`;
}
}

0

আপনি যদি কোনও অক্ষরকে না দিয়ে অক্ষরের পরিবর্তে শব্দের উপর ভিত্তি করে ছাঁটাই করতে চান তবে একটি বিকল্পকে সম্পূর্ণ পাঠ্য দেখার অনুমতি দিন।

শব্দের উপর ভিত্তি করে আরও পড়ুন সমাধানের সন্ধানে এখানে এসেছেন , কাস্টমটি ভাগ করে নিলাম Pipeআমি লেখার শেষ করেছি।

পাইপ:

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'readMore'
})
export class ReadMorePipe implements PipeTransform {

  transform(text: any, length: number = 20, showAll: boolean = false, suffix: string = '...'): any {

    if (showAll) {
      return text;
    }

    if ( text.split(" ").length > length ) {

      return text.split(" ").splice(0, length).join(" ") + suffix;
    }

    return text;
  }

}

টেমপ্লেটে:

<p [innerHTML]="description | readMore:30:showAll"></p>
<button (click)="triggerReadMore()" *ngIf="!showAll">Read More<button>

উপাদান:

export class ExamplePage implements OnInit {

    public showAll: any = false;

    triggerReadMore() {
        this.showAll = true;
    }

}

মডিউল:

import { ReadMorePipe } from '../_helpers/read-more.pipe';

@NgModule({
  declarations: [ReadMorePipe]
})
export class ExamplePageModule {}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.