iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
Modern Web

淺入淺出 Rails with Vue系列 第 22

【Day 22】淺入淺出 Rails with Vue - Vue 的基本概念 - 21

  • 分享至 

  • xImage
  •  

前言

本系列將介紹 Rails with Vue 的基本概念,並且以一個簡單的專案 Todo 來說明如何使用 Rails with Vue。我將透過這一系列的文章記錄我學習的過程,並且將我所學到的知識分享給大家。

Components Basics

DOM Template Parsing Caveats

要特別注意的是,一些 HTML 元素,例如 <ul><ol><table><select> 等,這些元素會限制只能包含特定的子元素。例如,<li> 只能出現在 <ul><ol> 中,<tr> 只能出現在 <table> 中,<option> 只能出現在 <select> 中。
反之,這些被包含的元素,也只能出現在特定的父元素中。例如,<td> 只能出現在 <tr> 中,<th> 只能出現在 <tr> 中,<optgroup> 只能出現在 <select> 中。
因此當我們試圖在 <table> 中使用 custom component 時,就會遇到一些問題。
如以下範例中,我們在 <table> 中使用了 <blog-post-row> 這個 custom component,但是 <table> 並不允許 <blog-post-row> 這個元素出現在其中,因此會出現錯誤訊息。

<table>
  <blog-post-row></blog-post-row>
</table>

為了解決這個問題,我們可以使用 is attribute workaround 來告訴 Vue 這個元素是一個 custom component。

<table>
  <tr is="blog-post-row"></tr>
</table>

假如你使用的是以下 3 種狀況之一的 string templates 而不是 DOM templates,那麼這個問題就不會發生,
因為這些 string templates 會被編譯成 DOM templates,而 DOM templates 會自動解決這個問題。

  • Single-file components
  • <script type="text/x-template">
  • template property in a Vue component

Component Registration

Component Names

在註冊一個 component 時,我們可以給它一個名稱,如以下範例中,我們註冊了一個 global component,
Vue.component 的第一個參數是 component 的名稱,第二個參數是 component 的內容。

Vue.component('my-component-name', { /* ... */ })

在程式語言中,命名一直是一門學問,但大部分都是透過使用的方式來決定命名的方式,
如果這個 component 將會直接使用在 DOM 中,那麼就強烈的建議你遵循 W3C rules 來命名你的 component。
基本上就是 all-lowercasemust contain a hyphen 兩大原則,例如 my-component-name
遵循這個原則將會避免和現有的和未來的 HTML 元素衝突。

Reference


上一篇
【Day 21】淺入淺出 Rails with Vue - Vue 的基本概念 - 20
下一篇
【Day 23】淺入淺出 Rails with Vue - Vue 的基本概念 - 22
系列文
淺入淺出 Rails with Vue30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言