একাধিক এনজি-সামগ্রী


95

আমি ng-contentকৌণিক 6 এ একাধিক ব্যবহার করে একটি কাস্টম উপাদান তৈরি করার চেষ্টা করছি তবে এটি কাজ করছে না এবং কেন তা আমার কোনও ধারণা নেই।

এটি আমার উপাদান কোড:

<div class="header-css-class">
    <ng-content select="#header"></ng-content>
</div>
<div class="body-css-class">
    <ng-content select="#body"></ng-content>
</div>

আমি অন্য জায়গায় এই উপাদানটি ব্যবহার করতে হবে এবং দুটি ভিন্ন HTML কোড ভিতরে রেন্ডার করার চেষ্টা করছি bodyএবং হেডার selectএর ng-content, ভালো কিছু:

<div #header>This should be rendered in header selection of ng-content</div>
<div #body>This should be rendered in body selection of ng-content</div>

কিন্তু উপাদানটি ফাঁকা উপস্থাপন করছে।

আপনি কি জানেন যে আমি কী ভুল করতে পারি বা একই উপাদানটিতে দুটি পৃথক বিভাগ রেন্ডার করার সবচেয়ে ভাল উপায় কী?

ধন্যবাদ!


দুঃখিত, স্ট্যাকওভারফ্লোটি আমার দ্বিতীয় কোড স্নিপেট সংরক্ষণ করে নি: আমি উপাদানটি যে কোডটি ব্যবহার করছি তা হ'ল: হ'ল শিরোনাম </ div> <div #body> এটি দেহের সামগ্রী </ div>
লুকাস সান্টোস

উত্তর:


179
  1. আপনি ছদ্মবেশী বৈশিষ্ট্য headerএবং bodyটেম্পলেট রেফারেন্সের বিপরীতে যুক্ত করতে পারেন (#header, #body)
  2. আর ব্যবহার transclude ng-contentসঙ্গে selectমত বৈশিষ্ট্য select="[header]"

app.comp.html

<app-child>
    <div header >This should be rendered in header selection of ng-content</div>
    <div body >This should be rendered in body selection of ng-content</div>
</app-child>

child.comp.html

<div class="header-css-class">
    <ng-content select="[header]"></ng-content>
</div>
<div class="body-css-class">
    <ng-content select="[body]"></ng-content>
</div>

ডেমো


6
আপনি যদি অতিরিক্ত ডিভি বা অন্য কোনও ট্যাগ রেন্ডার করতে না চান তবে আপনার <ng-container>
sobczi

4
@AmitChigadani আমি বিশ্বাস করি @sobczi বোঝানো যে আপনার প্রতিস্থাপন করতে পারেন <div header>সঙ্গে <ng-container header>
ব্যবহারকারী 12893298320392

4
আমি কাজগুলির <div header>সাথে প্রতিস্থাপনের <ng-container header>বিষয়টিও নিশ্চিত করি।
আজেফরাতি

49

ওয়েব উপাদান চশমা ফিট করতে । এমনকি যদি এটি কৌনিক হয়। এটি নির্বাচনের জন্য কৌণিক নির্দেশাবলী বা অন্য ব্যবহারের সাথে সংরক্ষিত বৈশিষ্ট্যের মতো বৈশিষ্ট্যগুলি এড়ানো সম্পর্কে about সুতরাং, আমরা কেবল "স্লট" বৈশিষ্ট্যটি ব্যবহার করি। আমরা <ng-content select="[slot=foobar]">হিসাবে দেখতে পাবেন <slot name="foobar">

উদাহরণ:

হ্যালো-ওয়ার্ল্ড ডেস্কটপ

<ng-content select="[slot=start]"></ng-content>
<span>Hello World</span>
<ng-content select="[slot=end]"></ng-content>

app.componal.html

<app-hello-world>
  <span slot="start">This is a </span>
  <span slot="end"> example.</span>
</app-hello-world>

ফলাফল

This is a Hello World example.

স্ট্যাকব্লিটজ উদাহরণ

"কলা" বা "মাছ" এর মতো আপনি যে কোনও নাম ব্যবহার করতে পারেন। তবে "শুরু" এবং "শেষ" হ'ল আগে এবং পরে উপাদান রাখার একটি ভাল কনভেনশন।


আমি কীভাবে এই উপাদানগুলি জিজ্ঞাসা করতে পারি? নাম স্লট সহ।
নেক্সিউজ

এটি আপনার কৌণিক এবং উপাদান সেটিংস এবং আপনি ঠিক কী চান তার উপর নির্ভর করে। আপনি হিজড়া বা ViewChild ব্যবহার করতে পারেন :hostএবং ::ng-deepSCSS হবে। তবে এটি কেবল একটি উদাহরণ। Stackblitz দেখুন হয়তো ::slotted/ ::contentএছাড়াও কাজ করবে। তবে নিশ্চিত নয়। ওয়েব এই বিষয় সম্পর্কে আরও অফার করবে। সাধারণত আপনার কেবল উপাদানটি স্টাইল করা উচিত। এবং স্টাইলিং স্টাফ বাইরে (গ্লোবাল) এড়িয়ে চলুন। অন্যথায় আপনার অযাচিত পার্শ্ব প্রতিক্রিয়া হবে।
ডোমিনিক

একটি ভাল অনুশীলন এটি মোড়ানো হয়। আমার শেষ মন্তব্যে আপডেট করা স্ট্যাকব্লিটজ উদাহরণটি দেখুন। উপাদানটির এইচটিএমএল এবং সিএসএস ফাইল দেখুন। এনজি-ডিপ এর চেয়ে আপনার এটি পছন্দ করা উচিত। যেমন <div class="end"><ng-content></ng-content></div>কারণ এই উপাদানটি উপাদানটিতে অ্যাক্সেসযোগ্য। এনজি-সামগ্রী কেবল ছদ্ম উপাদান যা বাইরে ডক উপাদান দ্বারা প্রতিস্থাপিত হয়। সুতরাং আপনাকে এনজি-ডিপ সিলেক্টর ব্যবহার করতে হবে।
ডোমিনিক

9

বিকল্পভাবে আপনি ব্যবহার করতে পারেন:

app.comp.html

<app-child>
    <div role="header">This should be rendered in header selection of ng-content</div>
    <div role="body">This should be rendered in body selection of ng-content</div>
</app-child>

child.comp.html

<div class="header-css-class">
    <ng-content select="div[role=header]"></ng-content>
</div>
<div class="body-css-class">
    <ng-content select="div[role=body]"></ng-content>
</div>

4

অন্যান্য উত্তর পরিপূরক:

এছাড়াও আপনি কাস্টম ট্যাগ এটা করতে পারেন (যেমন <ion-card>, <ion-card-header>এবং <ion-card-content>)।

app.comp.html

<app-child>
    <app-child-header>This should be rendered in header selection of ng-content</app-child-header>
    <app-child-content>This should be rendered in content selection of ng-content</app-child-content>
</app-child>

child.comp.html

<div class="header-css-class">
    <ng-content select="app-child-header"></ng-content>
</div>
<div class="content-css-class">
    <ng-content select="app-child-content"></ng-content>
</div>

আপনি একটি সতর্কতা বার্তা পাবেন, তবে এটি কার্যকর হবে। আপনি সতর্কতা বার্তাগুলি দমন করতে পারেন বা পরিচিত ট্যাগ যেমন headerবা হিসাবে ব্যবহার করতে পারেন footer। তবে, আপনি যদি এই পদ্ধতিগুলির কোনও পছন্দ না করেন তবে আপনার অন্য একটি সমাধানের সাথে চলতে হবে।

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