首頁 > web前端 > js教程 > 主體

Vue.js元件使用開發實例教程

高洛峰
發布: 2016-12-08 11:57:38
原創
1299 人瀏覽過

元件

元件可以擴充HTML元素,封裝可重複使用的程式碼,在較高的層面上,元件是自訂元素,vue.js的編譯器為它增加特殊功能,在有些情況下,元件也可以是原生HTML元素的形式,以is特性擴充。

Vue.js的元件可以理解為預先定義好了行為的ViewModel類別。一個元件可以預先定義很多選項,但最核心的是以下幾個:

模板(template):模板聲明了資料和最終展現給使用者的DOM之間的映射關係。

初始資料(data):一個組件的初始資料狀態。對於可重複使用的元件來說,這通常是私有的狀態。

接受的外部參數(props):組件之間透過參數來進行資料的傳遞和共享。參數預設是單向綁定(從上到下),但也可以明確地宣告為雙向綁定。

方法(methods):對資料的改動操作一般都在組件的方法內進行。可以透過v-on指令將使用者輸入事件和元件方法進行綁定。

生命週期鉤子函數(lifecycle hooks):一個元件會觸發多個生命週期鉤子函數,例如created,attached,destroyed等等。在這些鉤子函數中,我們可以封裝一些自訂的邏輯。和傳統的MVC相比,可以理解為 Controller的邏輯被分散到了這些鉤子函數中。

私有資源(assets):Vue.js當中將使用者自訂的指令、篩選器、元件等統稱為資源。由於全域註冊資源容易導致命名衝突,一個元件可以宣告自己的私有資源。私有資源只有該元件和它的子元件可以呼叫。

除此之外,同一顆組件樹之內的組件之間還可以透過內建的事件API來進行通訊。 Vue.js提供了完善的定義、重複使用和巢狀元件的API,讓開發者可以像搭積木一樣用元件拼出整個應用的介面。

組件大大提高了程式碼的效率和維護性以及復用率。

使用組件

註冊

1.創建一個組件構造器:

var MyComponent = Vue.extend({
//选项
})
登入後複製

   

2.將構造器用

3.在父實例的模組中以自訂元素的形式使用:

Vue.component('my-component',MyComponent)
登入後複製

   

範例:

<div id = "example">
<my-component></my-component>
</div>
登入後複製

   

範例:

<div id="example">
<my-component></my-component>
</div>
// 定义
var MyComponent = Vue.extend({
template: &#39;<div>A custom component!</div>&#39;
})
// 注册
Vue.component(&#39;my-component&#39;, MyComponent)
// 创建根实例
new Vue({
el: &#39;#example&#39;
})
登入後複製

   

組件的模板取代了自訂元素,自訂元素的作用只是作為一個掛載點。可以用實例選項 replace 決定是否要替換。

局部註冊

用實例選項components註冊,不需要全域註冊每個元件,可以讓元件只能用在其他元件內:

<div id = "example">
<div>A custom component!</div>
</div>
登入後複製

   

這種封裝也適用於其它資源,如指令、其它資源,如指令、它過濾器和過渡。

註冊語法糖

var Child = Vue.extend({ /* ... */ })
var Parent = Vue.extend({
template: &#39;...&#39;,
components: {
// <my-component> 只能用在父组件模板内
&#39;my-component&#39;: Child
}
})
登入後複製

   

組件選項問題

傳入Vue建構器的多數選項也可以用在Vue.extend()中,除了data和el,如果簡單的物件作為選項傳給Vue.extend(),則所有的實例將共享同一個data對象,因此我們應使用一個函數作為data選項,讓這個函數返回一個新對象:

// 在一个步骤中扩展与注册
Vue.component(&#39;my-component&#39;, {
template: &#39;<div>A custom component!</div>&#39;
})
// 局部注册也可以这么做
var Parent = Vue.extend({
components: {
&#39;my-component&#39;: {
template: &#39;<div>A custom component!</div>&#39;
}
}
})
登入後複製

   

Vue的模板模板是DOM模板,使用瀏覽器原生的解析器,所以它必須是有效的HTML片段,一些HTML元素對什麼元素可以放在它裡面有限制,常見的限制有:

a 不能包含其它的交互元素(如按鈕,連結)

ul 和ol 只能直接包含li

select 只能包含option 和optgroup

table 只能直接包含thead, tbody, tfoot, tr, caption, col, colgroups 只能直接包含thead, tbody, tfoot, tr, caption, col, colgroup直接包含th 和td

在實際中,這些限制會導致意外的結果。儘管在簡單的情況下它可能可以工作,但是你不能依賴自訂元件在瀏覽器驗證之前的展開結果。例如

不是有效的模板,即使 my-select 元件最終展開為

另一個結果是,自訂標籤(包括自訂元素和特殊標籤,如