當前位置:股票大全官網 - 資訊咨詢 - 如何使用vue註冊組件

如何使用vue註冊組件

這次給大家帶來的是如何使用vue註冊組件,使用vue註冊組件有哪些註意事項。下面是壹個實際案例。讓我們來看看。

壹.導言

組件系統是Vue.js中的重要概念之壹,它提供了壹種抽象,允許我們使用獨立的、可重用的小組件來構建大型應用,任何類型的應用接口都可以抽象成壹棵組件樹。

那麽什麽是組件呢?

組件可以擴展HTML元素,封裝可重用的HTML代碼。我們可以把組件看作自定義的HTML元素。

二、如何註冊組件

使用Vue.js的組件有三個步驟:創建組件構造器,註冊組件,使用組件。

讓我們用代碼演示這三個步驟。

& lt!DOCTYPE html & gt

& lthtml & gt

& ltbody & gt

& ltp id = " app " & gt

& lt!-註意:#app是Vue實例掛載的元素,組件應該在掛載的元素範圍內使用-& gt;

& lt我的組件& gt& lt/my-component & gt;

& lt/p & gt;

& lt/body & gt;

& ltscript src="ponent!& lt/p & gt;'

})

& lt!-2.註冊組件並指定組件的標簽。組件的HTML標簽是

Vue.component('我的組件',我的組件)

& lt!-3.按id掛載= app-& gt;

新Vue({

埃爾:' #app '

});

& lt/script & gt;

& lt/html & gt;運行結果如下:

I .全球註冊和本地註冊

當調用Vue.component()註冊壹個組件時,組件的註冊是全局的,這意味著該組件可以在任何Vue示例中使用。

如果不需要全局註冊,或者組件在其他組件中使用,可以使用option對象的components屬性實現局部註冊。

我自己的理解是,只要是組件,就代表全局組件,組件代表局部組件。

上面的例子可以改成本地註冊:

& lt!DOCTYPE html & gt

& lthtml & gt

& ltbody & gt

& ltp id = " app " & gt

& lt!- 3.my-component只能在# app-& gt;下使用。

& lt我的組件& gt& lt/my-component & gt;

& lt/p & gt;

& lt/body & gt;

& ltscript src = " js/vue . js " & gt;& lt/script & gt;

& lt腳本& gt

// 1.創建組件構造函數

var myComponent = Vue.extend({

模板:“& ltp & gt這是我的第壹個組件!& lt/p & gt;'

})

新Vue({

埃爾:' #app ',

組件:{

// 2.在Vue的實例下註冊myComponent組件。

“我的組件”:我的組件

}

});

& lt/script & gt;

& lt/html & gt;因為my-component組件是在對應於#app元素的Vue實例下註冊的,所以不能在其他Vue實例下使用。

& ltp id="app2 " >

& lt!-不能使用my-component組件,因為my-component是本地組件,屬於# app->

& lt我的組件& gt& lt/my-component & gt;

& lt/p & gt;

& lt腳本& gt

新Vue({

埃爾:' #app2 '

});

& lt/script & gt;二、組件註冊語法糖

註冊上述組件的方式有點麻煩。為了簡化這個過程,Vue.js提供了註冊語法sugar。

//全局註冊,my-component1是標簽名。

vue . component(' my-component 1 ',{

模板:“& ltp & gt這是第壹個組件!& lt/p & gt;'

})

var vm1 =新Vue({

El:“# app 1”

vue.component()的第1個參數是標簽名,第二個參數是option對象。組件模板是通過使用選項對象的模板屬性來定義的。

這樣Vue會在後臺自動調用Vue.extend()。

組件實現本地註冊

var vm2 =新Vue({

埃爾:' #app2 ',

組件:{

//本地註冊,my-component2是標簽名。

我的組件2 ':

模板:“& ltp & gt這是第二個組件!& lt/p & gt;'

},

//本地註冊,my-component3是標簽名。

我的組件3 ':

模板:“& ltp & gt這是第三個組件!& lt/p & gt;'

}

}

}三。父組件和子組件

我們可以在組件中定義和使用其他組件,這就構成了父子組件的關系。

& lt!DOCTYPE html & gt

& lthtml & gt

& ltbody & gt

& ltp id = " app " & gt

& lt父組件& gt

& lt/parent-component >

& lt/p & gt;

& lt/body & gt;

& ltscript src="ponent!& lt/p & gt;'

})

var Parent = Vue.extend({

//使用

模板:“& ltp & gt這是父組件& lt/p & gt;& lt子組件& gt& lt/child-component & gt;',

組件:{

//本地註冊子組件,只能在父組件內使用。

'子組件':子

}

})

//全局註冊父組件。

Vue.component('父組件',父)

新Vue({

埃爾:' #app '

})

& lt/script & gt;

& lt/html & gt;這段代碼的運行結果如下

第四,使用腳本或模板標簽

雖然語法糖簡化了組件註冊,但是在模板選項中拼接HTML元素很麻煩,這也導致了HTML和JavaScript的高耦合。

幸運的是,Vue.js提供了兩種方法來分離JavaScript中定義的HTML模板。

& lt!DOCTYPE html & gt

& lthtml lang = " en " & gt

& lthead & gt

& ltmeta charset="UTF-8 " >

& lttitle & gtVue組件

& ltscript src = " js/vue . js " & gt;& lt/script & gt;

& lt/head & gt;

& ltbody & gt

& ltp id="app1 " >

& ltmy-com & gt;& lt/my-com & gt;

& ltmy-com 1 & gt;& lt/my-com 1 & gt;

& lt/p & gt;

& lttemplate id = " myCom " & gt

& ltp & gt這是由模板標簽構建的組件

& lt/template & gt;

& ltscript type = " text/x-template " id = " mycom 1 " >

& ltp & gt這是由腳本標記構建的組件

& lt/script & gt;

& ltscript src = " ponent(' my-com 1 ',{

模板:“#myCom1”

});

var app1 =新Vue({

El:“# app 1”,

組件:{

my-com': {

模板:“#myCom”

}

}

});

& lt/script & gt;

& lt/body & gt;

& lt/html & gt;運行結果:

註意:使用

在理解了組件創建和註冊的過程之後,我建議使用

這使得HTML代碼和JavaScript代碼分開,易於閱讀和維護。

五、模板註意事項

1.用作父組件中的子標簽。

& ltp id = " app " & gt

& lt父組件& gt

& lt子組件& gt& lt/child-component >

& lt/parent-component >

& lt/p & gt;以上是錯誤的。為什麽這種方法無效?因為子組件註冊到父組件時,Vue.js會編譯父組件的模板,模板的內容已經決定了父組件要渲染的HTML。

& lt父組件& gt?& lt/parent-component >相當於runtime,它的壹些子標簽只會作為普通的HTML執行,

2.組件的模板只能有壹個根元素。不允許出現以下情況。

模板:` & ltp & gt這是壹個本地自定義組件,只能在Vue的當前實例中使用

& ltbutton & gt妳好& lt/button & gt;`

3.組件中的數據必須是函數。

註冊組件時傳遞的配置類似於創建Vue實例時傳遞的配置,但是有壹些不同。其中之壹是數據屬性必須是函數。

這是因為如果像Vue實例壹樣傳入壹個對象,由於JS中object類型的變量實際上持有該對象的引用,當有多個這樣的組件時,數據會被共享,壹個組件中數據的變化會引起其他組件中數據的變化。

使用返回對象的函數,每次使用組件都會創建壹個新的對象,所以不會有* * *享受數據的問題。

4.DOM模板分析

當使用DOM作為模板時(比如在已有的元素上掛載el選項),妳會受到HTML的限制,因為Vue只能在瀏覽器對HTML進行解析和標準化後才能得到模板內容。尤其喜歡這些元素

在自定義組件中使用這些受限元素會導致壹些問題,例如

& lt表& gt

& ltmy-row & gt;...& lt/my-row & gt;

& lt/table & gt;自定義組件

& lt表& gt

& lttr is = " my-row " & gt;& lt/tr & gt;

& lt/table & gt;也就是說,在標準HTML中,某些元素中只能放置某些子元素,而其他元素只能存在於某些父元素中。比如表中不能放P,tr的父元素不能是P等等。因此,當使用自定義標簽時,標簽名稱仍然是這些標簽的名稱,但是您可以在標簽的is屬性中填入自定義組件的名稱。

第三,動態組件

有時,在不同組件之間動態切換非常有用,例如在多選項卡界面中。

簡單來說就是:在壹個掛載點下放幾個組件,然後根據父組件的壹個變量來決定顯示哪個或者不顯示。

重要的壹點:在掛載點使用組件標簽,然後使用v-bind:is= "Component Name ",就會自動找到匹配的組件名。如果沒有,則不會顯示。

動態組件,先看案例效果:

代碼演示:css代碼不會被復制,如上例效果所示。

& ltscript src = "/vue " & gt;& lt/script & gt;

& ltp id = " dynamic-component-demo " class = " demo " >

& lt按鈕v-for=“選項卡中的選項卡”

v-bind:key="tab "

v-bind:class="['tab-button ',{ active: currentTab === tab }]"

v-on:click = " current tab = tab " & gt;{ { tab } } & lt/button & gt;

& lt組件v-bind:is = " currentTabComponent " class = " tab " & gt;& lt/component & gt;

& lt/p & gt;在這裏,v-bind:key其實是可有可無的。關於key的詳細介紹見官網。

這裏使用v-bind:class和v-on:click來改變樣式。

關鍵是組件標簽。

& lt腳本& gt

//顯示定義了三個組件。

vue . component(' tab-section chief ',{

模板:“& ltp & gt某* * *有100個科長

})

Vue.component('tab - director ',{

模板:“& ltp & gt壹個有50個導演的

})

Vue.component('tab - Director ',{

模板:“& ltp & gt1 * * *有10個控制器

})

新Vue({

El:' #動態組件演示',

數據:{

當前標簽:“導演”,

制表符:['科長','主任','主任']

},

//計算屬性,根據currentTab的變化判斷選擇哪個組件。

計算值:{

currentTabComponent:函數(){

return 'tab-' + this.currentTab

}

}

})

& lt/script & gt;相信看完這個案例,妳已經掌握了方法。更多精彩請關註Gxl上其他相關文章!

推薦閱讀:

js的使用方法有哪些(帶代碼)

如何動態導入JS文件