এনজিফোর্ডের ভিতরে গতিশীল টেম্পলেট রেফারেন্স পরিবর্তনশীল (কৌণিক 9)


97

কোনও এলিমেন্টের ভিতরে ডায়নামিক টেম্পলেট রেফারেন্স ভেরিয়েবল কীভাবে ঘোষণা করবেন ngFor?

আমি এনজি-বুটস্ট্র্যাপ থেকে পপওভার উপাদানটি ব্যবহার করতে চাই, পপওভার কোডটি (এইচটিএমএল বাইন্ডিং সহ) দেখানো হয়েছে:

<ng-template #popContent>Hello, <b>{{name}}</b>!</ng-template>
<button type="button" class="btn btn-secondary" [ngbPopover]="popContent" popoverTitle="Fancy content">
    I've got markup and bindings in my popover!
</button>

আমি কীভাবে এই উপাদানগুলিকে গুটিয়ে রাখতে পারি ngFor?

<div *ngFor="let member of members">
    <!-- how to declare the '????' -->
    <ng-template #????>Hello, <b>{{member.name}}</b>!</ng-template>
        <button type="button" class="btn btn-secondary" [ngbPopover]="????" popoverTitle="Fancy content">
        I've got markup and bindings in my popover!
    </button>
</div>

হুঁ ... কোন ধারণা?


গতিশীল রেফারেন্স ভেরিয়েবলের মতো কোনও জিনিস নেই। আপনার কেন মনে হয় এটি গতিশীল হওয়া দরকার?
— গন্টার জ্যাচবাউয়ার

কারণ তাদের টিউটোরিয়ালটি একটি পপওভারের মধ্যে এইচটিএমএল বাঁধাই করার জন্য বলেছিল, তারপরে আমাদের একটি তৈরি ng-templateকরতে হবে এবং এটি টেমপ্লেট রেফারেন্স ভেরিয়েবলের সাথে উল্লেখ করা দরকার , তবে এখন আমি এই পপওভারটিকে একটি ngForউপাদানটির মধ্যে ব্যবহার করতে চাই
— বু ইয়ান

8
শুধু একই কাজ। টেমপ্লেট ভেরিয়েবল একই উপাদান থাকা সত্ত্বেও প্রতিটি উপাদানগুলির জন্য আলাদা হবে।
— গন্টার জ্যাচবাউয়ার

4
আপনি যদি সমস্ত কিছুর জন্য একই রেফ ব্যবহার করেন তবে কী হবে ? আপনি এটি পরীক্ষা করেছেন?
— বিকাশকারী

হা, আমি এটি কখনই ভাবি না ... আমি এখনই এটি পরীক্ষা করব ... কারণ আমি "সূচী" ** দিয়ে একটি ** টেম্পলেট রেফারেন্স ভেরিয়েবল কীভাবে ঘোষণা করব তা নিয়ে ভাবতে থাকি ... আমি এটি পরীক্ষা করার পরে আপডেট করব। ..: ডি
— বু ইয়ান জিওং

উত্তর:


99

টেমপ্লেট রেফারেন্স ভেরিয়েবলগুলি যে টেম্পলেটটিতে সংজ্ঞায়িত করা হয় সেগুলি এগুলি স্কোপ করা হয় A

সুতরাং আপনি আপনার টেম্পলেট রেফারেন্সের জন্য কেবল একটি ভেরিয়েবল ব্যবহার করতে পারেন

<div *ngFor="let member of members">
  <ng-template #popupContent>Hello, <b>{{member.name}}</b>!</ng-template>
  <button type="button" class="btn btn-secondary" [ngbPopover]="popupContent" popoverTitle="Fancy content">
      I've got markup and bindings in my popover!
  </button>
</div>

এবং এটি কাজ করা উচিত কারণ এটি ইতিমধ্যে ভিতরে ঘোষণা করেছে <ng-template ngFor

Plunker উদাহরণ

আরও তথ্যের জন্য আরও দেখুন:


4
মনে রাখবেন যে আপনি যদি এটি ব্যবহার করে থাকেন তবে আপনি @ViewChildএই সমাধানটি ব্যবহার করতে পারবেন না (এবং তারপরে @ অ্যালেক্সবয়েসেলের একটি ব্যবহার করা উচিত)
— এলোমেলো

17

এটি আমি খুঁজে পেয়েছি সেরা সমাধান: https://stackoverflow.com/a/40165639/3870815

এই উত্তরে তারা ব্যবহার করে:

@ViewChildren('popContent') components:QueryList<CustomComponent>;

গতিশীলভাবে উত্পন্ন উপাদানগুলির একটি তালিকা তৈরি করা। আপনি এটি চেক আউট সুপারিশ!


4
সেরা উত্তর!
— igg

1

এটির অনুমতি দেওয়ার আরেকটি উপায় হ'ল একটি উপাদান তৈরি করা যা বোতামটি এবং এনজি-টেম্পলেট মোড় করে

<div *ngFor="let member of members">
    <popover-button [member]="member"></pop-over-button>
</div>

এবং পপওভার বোতামের উপাদানগুলিতে নিম্নলিখিতগুলি পান

<ng-template #popContent>Hello, <b>{{member.name}}</b>!</ng-template>
    <button type="button" class="btn btn-secondary" [ngbPopover]="popContent" popoverTitle="Fancy content">
    I've got markup and bindings in my popover!
</button>

-1

আপনি ব্যবহার করতে পারেন trackBy: trackByFnমধ্যে*ngFor

<div *ngFor="let member of members;trackBy: trackByF">
    <ng-template #popupContent>Hello, <b>{{member.name}}</b>!</ng-template>
        <button type="button" class="btn btn-secondary" [ngbPopover]="popupContent" popoverTitle="Fancy content">
        I've got markup and bindings in my popover!
    </button>
</div>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.