এনজিফোর্ডের ভিতরে গতিশীল টেম্পলেট রেফারেন্স পরিবর্তনশীল (কৌণিক 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.