سلام دوستان. یکی از مهمترین و پرکاربردترین بخش‌های فریم‌ورک ویوو، کامپوننت‌ها هست. با استفاده از کامپوننت‌ها می‌تونیم برنامه رو به بخش‌های مجزا تقسیم کنیم. مثلا یک کد HTML داریم بصورت زیر:

<ul class="universe">
  <li>I'm Sun</li>
  <li>I'm Earth</li>
  <li>I'm Moon</li>
  <li>I'm Oxygen</li>
</ul>

در حالت عادی اگه بخوایم از این کد توی جاهای مختلف استفاده کنیم باید همه‌ی محتویات رو تکرار کنیم:

<ul class="universe">
   ...
</ul>

<ul class="universe">
   ...
</ul>

<ul class="universe">
   ...
</ul>

و اگه بخوایم این کد رو ویرایش کنیم (مثلا یک li دیگه اضافه کنیم) ابتدا باید هر جایی که این کد تکرار شده رو پیدا کنیم و بعد تغییر بدیم. که این یک کار بیهوده هست وقتی چیزی داریم به اسم کامپوننت! با کامپوننت می‌تونیم اون کد HTML رو فقط یک بار بنویسیم و بی‌نهایت اون رو فراخونی کنیم.

توی ویوو کامپوننت‌ها نقش پر رنگی دارن و جالبه که بدونیم خود نمونه اصلی (Vue Instance که با new Vue ساخته شده) هم یک کامپوننت به حساب میاد. کامپوننت‌هایی هم که می‌سازیم یک نمونه‌ی Vue به حساب میان و می‌تونن اعضایی مثل data، methods، computed و … داشته باشن.

 

تعریف یک کامپوننت

روش‌های مختلفی برای ساختن یک کامپوننت وجود داره که استفاده از Vue.component() یکی از اونهاست:

Vue.component('universe', {
  template: `
    <ul class="universe">
      <li>I'm Sun</li>
      <li>I'm Earth</li>
      <li>I'm Moon</li>
      <li>I'm Oxygen</>
    </ul>
  `
})

به آرگومان اول این متد اسم کامپوننت رو پاس می‌دیم. آرگومان دوم یک آبجکت هست که شامل ویژگی‌های کامپوننت میشه. محتویات HTML کامپوننت رو بصورت رشته توی template قرار می‌دیم. حالا می‌تونیم از کامپوننت بالا بصورت <universe></universe> توی قسمت View استفاده کنیم:

کامپوننت‌ها می‌تونن بصورت تو در تو قرار بگیرن:

<component1>
  <component2>
    <component3></component3>
  </component2>
</component1>

توی کد بالا به component3 می‌گن فرزند که والد اون میشه component2 و خود component2 یک فرزند هست برای component1.

 

data در کامپوننت‌ها

همونطور که گفته شد، کامپوننت‌ها می‌تونن ویژگی‌هایی مثل نمونه Vue داشته باشن. مثلا data و computed پراپرتی‌ها. data توی کامپوننت‌ها بصورت زیر تعریف میشه: