麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

Vue動態創建注冊component的實例代碼

2019-11-19 11:20:53
字體:
來源:轉載
供稿:網友

前言

在深入了解Vue動態創建Component前先了解一下常規組件聲明形式。

Vue 的組件通常可以通過兩種方式來聲明,一種是通過 Vue.component,另外一種則是 Single File Components(SFC) 單文件組件 。

常規組件聲明與注冊

// 定義一個名為 button-counter 全局注冊的組件Vue.component("button-counter", { template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>', data() {  return {   count: 0  } }});new Vue({ template: `  <div id="app">   <h1>App Component</h1>   <button-counter></button-counter>  </div> `}).$mount("#app");

在上面的代碼中我們聲明了一個叫做 button-counter 的組件。如果在常規情況下使用的話,只需要在頁面上寫對應的 <button-counter></button-counter> 標簽就夠了。

全局創建注冊組件可以實現動態創建,但是我們必須在 template 聲明使用該組件,而且如果把所有組件都全局注冊這并不是一個好辦法。

官方文檔中我們可以看到,我們可以通過 Vue.component('component-name') 的方式來注冊一個組件。

而組件實例又有 $mount 這樣一個方法,官方對于 $mount 的解釋如下:

vm.$mount( [elementOrSelector] )
Arguments:
{Element | string} [elementOrSelector]
{boolean} [hydrating]
Returns: vm - the instance itself
Usage:
If a Vue instance didn't receive the el option at instantiation, it will be in “unmounted” state, without an associated DOM element. vm.$mount() can be used to manually start the mounting of an unmounted Vue instance.
If elementOrSelector argument is not provided, the template will be rendered as an off-document element, and you will have to use native DOM API to insert it into the document yourself.
The method returns the instance itself so you can chain other instance methods after it.

那我們是否可以通過這種方式來達到我們的需求呢?

還不夠!

為什么???

因為 Vue.component 返回的結果是一個 function!它返回的并不是 組件實例,而是一個構造函數。

那到這里其實我們就清楚了。 對于 Vue.component 聲明的組件,我們先通過 Vue.component 獲取它的構造函數,再 new 出一個組件實例,最后 通過 $mount 掛載到 html 上。

// 定義一個名為 button-counter 全局注冊的組件Vue.component("button-counter", { template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>', data() {  return {   count: 0  } }});new Vue({ template: `  <div id="app">   <h1>App Component</h1>   <button @click="insert">click to insert button-counter comonent</button>   <div id="insert-container"></div>  </div> `, methods: {  insert() {   const ButtonCounter = Vue.component("button-counter"); // 只能查找到全局注冊到組件   const instance = new ButtonCounter();   instance.$mount("#insert-container");  } }}).$mount("#app");

上述代碼中,Vue.component 先獲取到組件的構造函數,然后構造實例,通過實例的一些方法來處理數據和掛載節點。

但是我們發現 Vue.component 只負責全局注冊或查找。

如果想要針對局部注冊的組件使用動態創建并添加我們需要使用 Vue.extend 基礎Vue構造器創建"子類"達到目的。

其實 Vue.component 方法傳入的選項是一個對象時,Vue自動調用 Vue.extend。

完整代碼示例:

const ButtonCounterComponent = { template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>', data() {  return {   count: 0  } }};new Vue({ template: `  <div id="app">   <h1>App Component</h1>   <button @click="insert">click to insert button-counter comonent</button>   <div id="insert-container"></div>  </div> `, methods: {  insert() {   const ButtonCounter = Vue.extend(ButtonCounterComponent);   const instance = new ButtonCounter();   instance.$mount("#insert-container");  } }}).$mount("#app");

單文件應用

在實際使用場景里,大部分都是用腳手架構建到項目,使用 *.vue 這種單文件方式注冊組件。

<template></template><script>export default { data() {  return {   msg: "hello"  } }, created() {}, mounted() {}, destroy() {}};</script><style scoped></style>

import *.vue 返回的就是模版中 script 中 export 部分。

總結

至此,我們知道了,全局組件動態注冊 和 局部組件動態注冊 的使用方法和注意事項,我們可以結合實際情況去選擇不同方案進行搭配即可。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产青草视频在线观看 | 在线成人免费视频 | 一区二区三区黄色 | 久国产精品视频 | 欧美大荫蒂xxx | 91超在线 | 免费a级作爱片免费观看欧洲 | 精品国产视频一区二区三区 | 黄在线| 久久国产精品免费视频 | 欧美精品久久久久久久久久 | 毛片网站网址 | 国产午夜亚洲精品理论片大丰影院 | 国产免费一区二区三区最新不卡 | 国产成人精品一区在线播放 | av中文字幕免费在线观看 | 高清国产在线 | hd性videos意大利复古 | 在线视频a| 亚洲无线看 | 国产资源在线观看视频 | 李宗瑞国产福利视频一区 | 中文字幕 亚洲一区 | 国产精品久久久久久久久久10秀 | 国产精品视频久久久 | 午夜精品视频在线 | 成人勉费视频 | 成年性羞羞视频免费观看无限 | 国产免费一区二区三区视频 | chinese军人gay呻吟 | 欧美日韩国产成人在线观看 | 麻豆911| 国产精品一区二区三区在线 | 欧美日韩亚洲在线 | 亚洲成人午夜精品 | 成人黄色小视频网站 | 一级做a爱视频 | 粉嫩粉嫩一区二区三区在线播放 | 午夜精品福利影院 | 欧美成人午夜影院 | 久久精品探花 |