Scoped Slots

Vue.js

Scoped Slots

একটি স্কোপড স্লট উপাদান থেকে স্থানীয় ডেটা ফেরত দেয় যাতে অভিভাবক এটিকে কীভাবে রেন্ডার করবেন তা চয়ন করতে পারেন।

স্কোপড স্লট ডেটা প্রবাহ

ডেটা প্রবাহ চিত্র

উপাদান তথ্য

উপাদান স্থানীয় তথ্য

v-bind

ডেটা আবদ্ধ করে

v-slot

ডেটা পায়

পিতামাতা

ডেটা রেন্ডার করে

পিতামাতার কাছে ডেটা পাঠানো

আমরা অভিভাবককে স্থানীয় ডেটা পাঠাতে উপাদান স্লটে v-bind ব্যবহার করি:

উপাদান (SlotComp.vue)

<template>
  <slot v-bind:lclData="data"></slot>
</template>

<script>
  export default {
    data() {
      return {
        data: 'This is local data'
      }
    }
  }
</script>

অভিভাবক (App.vue)

<slot-comp v-slot="dataFromSlot">
  <h2>{{ dataFromSlot.lclData }}</h2>
</slot-comp>

🔒স্থানীয় তথ্য:

উপাদানের ভিতরের ডেটাকে 'স্থানীয়' হিসাবে উল্লেখ করা যেতে পারে কারণ এটি অভিভাবকের কাছে অ্যাক্সেসযোগ্য নয় যদি না এটি ভি-বাইন্ডের সাথে অভিভাবকের কাছে প্রেরণ করা হয়।

একটি স্কোপড স্লট থেকে ডেটা পুনরুদ্ধার করা হচ্ছে

কম্পোনেন্টের স্থানীয় ডেটা ভি-বাইন্ড দিয়ে পাস করা হয়, এবং প্যারেন্টে ভি-স্লট দিয়ে পুনরুদ্ধার করা যেতে পারে:

উদাহরণ

আপনার নিজস্ব Vue সার্ভার পান

// App.vue:
<slot-comp v-slot="dataFromSlot">
  <h2>{{ dataFromSlot.lclData }}</h2>
</slot-comp>

🏷️নামকরণ:

উপরের উদাহরণে, 'dataFromSlot' হল এমন একটি নাম যা আমরা স্কোপড স্লট থেকে যে ডেটা অবজেক্ট পাচ্ছি তা উপস্থাপন করতে আমরা বেছে নিতে পারি। আমরা 'lclData' অ্যাট্রিবিউট ব্যবহার করে স্লট থেকে টেক্সট স্ট্রিং পাই এবং অবশেষে একটি <h2> ট্যাগে টেক্সট রেন্ডার করতে ইন্টারপোলেশন ব্যবহার করি।

সারি সহ স্কোপড স্লট

একটি স্কোপড স্লট v-for ব্যবহার করে একটি অ্যারে থেকে ডেটা পাস করতে পারে, কিন্তু App.vue-এর কোডটি মূলত একই:

উদাহরণ

উপাদান (SlotComp.vue)

<template>
  <slot
    v-for="x in foods"
    :key="x"
    :foodName="x"
  ></slot>
</template>

<script>
  export default {
    data() {
      return {
        foods: ['Apple','Pizza','Rice','Fish','Cake']
      }
    }
  }
</script>

অভিভাবক (App.vue)

<slot-comp v-slot="food">
  <h2>{{ food.foodName }}</h2>
</slot-comp>

অবজেক্টের অ্যারে সহ স্কোপড স্লট

একটি স্কোপড স্লট v-for ব্যবহার করে অবজেক্টের অ্যারে থেকে ডেটা পাঠানো যেতে পারে:

উদাহরণ

উপাদান (SlotComp.vue)

<template>
  <slot
    v-for="x in foods"
    :key="x.name"
    :foodName="x.name"
    :foodDesc="x.desc"
    :foodUrl="x.url"
  ></slot>
</template>

<script>
  export default {
    data() {
      return {
        foods: [
          { name: 'Apple', desc: 'Apples are a type of fruit that grow on trees.', url: 'img_apple.svg' },
          { name: 'Pizza', desc: 'Pizza has a bread base with tomato sauce, cheese, and toppings on top.', url: 'img_pizza.svg' },
          { name: 'Rice', desc: 'Rice is a type of grain that people like to eat.', url: 'img_rice.svg' },
          { name: 'Fish', desc: 'Fish is an animal that lives in water.', url: 'img_fish.svg' },
          { name: 'Cake', desc: 'Cake is something sweet that tastes good but is not considered healthy.', url: 'img_cake.svg' }
       ]
      }
    }
  }
</script>

অভিভাবক (App.vue)

<slot-comp v-slot="food">
  <hr>
  <h2>{{ food.foodName }}<img :src=food.foodUrl></h2>
  <p>{{ food.foodDesc }}</p>
</slot-comp>

স্কোপড স্লট থেকে স্ট্যাটিক ডেটা

একটি স্কোপড স্লট স্ট্যাটিক ডেটাও পাস করতে পারে, যেমন ডেটা যা Vue ইনস্ট্যান্সের ডেটা সম্পত্তির অন্তর্গত নয়।

স্ট্যাটিক ডেটা পাঠানোর সময় v-bind ব্যবহার করা হয় না।

উদাহরণ

উপাদান (SlotComp.vue)

<template>
  <slot
    staticText="This text is static"
    :dynamicText="text"
  ></slot>
</template>

<script>
  export default {
    data() {
      return {
        text: 'This text is from the data property'
      }
    }
  }
</script>

অভিভাবক (App.vue)

<slot-comp v-slot="texts">
  <h2>{{ texts.staticText }}</h2>
  <p>{{ texts.dynamicText }}</p>
</slot-comp>

📝স্ট্যাটিক বনাম গতিশীল:

নীচের উদাহরণে, আমরা একটি টেক্সট সহ একটি স্ট্যাটিক টেক্সট পাস করি যা ডাটা ইনস্ট্যান্সের সাথে গতিশীলভাবে আবদ্ধ, যাতে আপনি পার্থক্যটি দেখতে পারেন।

নাম দেওয়া হয়েছে স্কোপড স্লট

স্কোপড স্লট নামকরণ করা যেতে পারে.

নামযুক্ত স্কোপড স্লট ব্যবহার করতে, উপাদানের মধ্যে থাকা স্লটগুলিকে 'নাম' বৈশিষ্ট্য দিয়ে নামকরণ করতে হবে।

এবং একটি নামযুক্ত স্লট থেকে ডেটা পেতে, আপনাকে অবশ্যই v-slot কৌশল বা শর্টহ্যান্ড # সহ উপাদানটি ব্যবহার করে অভিভাবকের মধ্যে সেই নামটি উল্লেখ করতে হবে।

উদাহরণ

এই উদাহরণে, উপাদানটি একটি পদ্ধতি তৈরি করে যা "বাম স্লট" উল্লেখ করে এবং একটি পদ্ধতি যা "রাইট স্লট" উল্লেখ করে।

উপাদান (SlotComp.vue)

<template>
  <slot
    name="leftSlot"
    :text="leftText"
  ></slot>
  <slot
    name="rightSlot"
    :text="rightText"
  ></slot>
</template>

<script>
  export default {
    data() {
      return {
        leftText: 'This text belongs to the LEFT slot.',
        rightText: 'This text belongs to the RIGHT slot.'
      }
    }
  }
</script>

অভিভাবক (App.vue)

<slot-comp #leftSlot="leftProps">
  <div>{{ leftProps.text }}</div>
</slot-comp>
<slot-comp #rightSlot="rightProps">
  <div>{{ rightProps.text }}</div>
</slot-comp>

বিকল্প: একাধিক টেমপ্লেট সহ একক উপাদান

বিকল্পভাবে, দুটি ভিন্ন "টেমপ্লেট" ট্যাগ সহ, প্রতিটি "টেমপ্লেট" ট্যাগ একটি ভিন্ন স্লট প্রতিনিধিত্ব করে, উপাদানটি শুধুমাত্র একবার তৈরি করা যেতে পারে।

উদাহরণ

এই উদাহরণে, উপাদানটি শুধুমাত্র একবার তৈরি করা হয়েছে, কিন্তু দুটি "টেমপ্লেট" ট্যাগ সহ, প্রতিটি একটি ভিন্ন স্লটের প্রতিনিধিত্ব করে।

SlotComp.vue .

// App.vue:
<slot-comp>

  <template #leftSlot="leftProps">
    <div>{{ leftProps.text }}</div>
  </template>

  <template #rightSlot="rightProps">
    <div>{{ rightProps.text }}</div>
  </template>

</slot-comp>

ভিউ টিউটোরিয়াল

ব্যায়াম দিয়ে নিজেকে পরীক্ষা করুন

কম্পোনেন্টের স্লট থেকে পিতামাতার কাছে ডেটা ফেরত দেওয়ার জন্য কী কৌশল প্রয়োজন?

কম্পোনেন্টের স্থানীয় ডেটা ____ এর সাথে একটি স্লট থেকে পাঠানো হয়, এবং এটি ____ এর সাথে অভিভাবকের মধ্যে প্রাপ্ত করা যেতে পারে।

CompOne.vue

<slot 
:lclData="data"></slot>

App.vue

<comp-one 
:"dataFromSlot">
  <h2>{{ dataFromSlot.lclData }}</h2>
</comp-one>
v-model, v-receive
✗ ভুল! v-মডেল দ্বিমুখী ডেটা বাইন্ডিংয়ের জন্য, V-এর মধ্যে v-রিসিভ অনুপস্থিত
v-on, v-catch
✗ ভুল! ভি-অন ইভেন্টের জন্য, ভি-তে ভি-ক্যাচ অনুপস্থিত
v-bind, v-slot
✓ ঠিক আছে! v-bind স্লট থেকে ডেটা পাঠায়, v-slot এটি অভিভাবকের কাছে গ্রহণ করে
v-send, v-get
✗ ভুল! V-send এবং v-get Vue থেকে অনুপস্থিত