Vue一個案例引發的「程式設計式」建立元件
在專案的開發過程中「動態新增標籤」,「動態新增屬性」,「或者動態新增關鍵詞」,是我們在專案中經常遇到的一個場景。
最近在做專案時,就遇到了動態新增屬性的案例。
通常在單檔案元件的開發模式中,我們會以如下的方式建立元件。
<template>
<span></span>
</template>
<script>
export default {
name: "Tag"
};
</script>
然後在需要的地方引入使用即可。
<template>
<div id="app">
<tag></tag>
</div>
</template>
<script>
import Tag from "./components/Tag";
export default {
name: "app",
components: { Tag }
};
</script>
運算元據的方式
比如我們實現一個動態新增搜尋關鍵詞的案例,通常的方式會透過迴圈元件然後處理資料的方式。
<template>
<div id="app">
<base-input v-for="item in keywords" :key="item.id" v-model="item.name"></base-input>
<button class="add-btn" @click="addKeyWords">新增關鍵詞</button>
</div>
</template>
<script>
import BaseInput from "./components/BaseInput";
export default {
name: "app",
components: { BaseInput },
data() {
return {
keywords: []
};
},
methods: {
addKeyWords() {
this.keywords.push({
name: ""
});
}
}
};
</script>
很簡單方便的可以實現這個功能,但這種實現方式有時候不夠靈活,只能把模版放在既定的位置。
如果我們想隨時隨地(任何容器)的建立元件該如何呢?這就是下面我們需要說的「程式設計式」建立元件。
今天就來說說如何利用「程式設計式」建立元件的方式去實現動態載入元件。
程式設計式建立元件
在說「程式設計式」之前,先來熟悉幾個API。
-
Vue.extend()
:可以建立一個“子類”。引數是一個包含元件選項的物件。 -
propsData:建立例項時傳遞的 props,只用於 new 建立的例項中。
-
$mount()
:
如果 Vue 例項在例項化時沒有收到 el 選項,則它處於“未掛載”狀態,沒有關聯的 DOM 元素。可以使用 vm.$mount() 手動地掛載一個未掛載的例項。
如果沒有提供引數,模板將被渲染為文件之外的的元素,並且你必須使用原生 DOM API 把它插入文件中。
例如:
// 或者,在文件之外渲染並且隨後掛載
var component = new MyComponent().$mount()
document.getElementById('app').appendChild(component.$el)
熟悉之後,我們就來看看如何使用程式設計式新增元件。
<template>
<div id="app">
<button class="add-btn" @click="addKeyWords">新增關鍵詞</button>
<div ref="container" class="container"></div>
</div>
</template>
<script>
import Vue from "vue";
import BaseInput from "./components/BaseInput";
export default {
name: "app",
methods: {
addKeyWords() {
var ComponentInput = Vue.extend(BaseInput);
var vm = new ComponentInput({
propsData: { value: "996" }
});
vm.$mount();
this.$refs.container.appendChild(vm.$el);
}
}
};
</script>
我們可以看到,透過上面的實現之後,我們可以透過「$refs」屬性把元件新增到任何的容器中,而且我們可以透過 JavaScript 程式設計的方式隨時新增。
是不是很酷,小夥伴趕緊去試試吧。
如果文章對你有啟發,記得給個贊哦。
公眾號:六小登登,更多幹貨文章。
人人都可以成為高手。一個愛寫作的技術人。歡迎交流。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3209/viewspace-2822495/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Vue一個案例引發的遞迴元件的使用Vue遞迴元件
- Vue一個案例引發「動畫」的使用總結Vue動畫
- Vue的第一個元件設計Vue元件
- Vue一個案例引發的動態元件與全域性事件繫結總結Vue元件事件
- 一個 Vue 地圖元件錯誤引發的思考Vue地圖元件
- Vue一個案例引發「內容分發slot」的最全總結Vue
- vue - Vue元件化程式設計Vue元件化程式設計
- Vue案例引發的「巢狀元件」通訊的簡單方式Vue巢狀元件
- 一個引發程式設計師們幹架的問題程式設計師
- Vue案例引發的「過濾器」的使用Vue過濾器
- 一個map函式引發的血案函式
- 一個插排引發的設計思想 (一) 觀察者模式模式
- 女生節的一個分號,引發程式設計師的瘋狂評論程式設計師
- 從函式式元件引發的效能思考函式元件
- 建立自己的上傳元件的程式設計思路 (轉)元件程式設計
- 由重構react元件引發的函數語言程式設計的思考React元件函數程式設計
- VUE開發一個圖片輪播的元件Vue元件
- 我的元件之產生式程式設計元件程式設計
- 程式設計第一個Apple Watch程式建立專案程式設計APP
- 如何開發一個基於 Vue 的 ui 元件庫(一)VueUI元件
- vue-router 程式設計式的導航Vue程式設計
- go 併發程式設計案例一 課程介紹Go程式設計
- 聊一聊BEM設計模式在Vue元件開發中的應用設計模式Vue元件
- vue的一個分頁元件Vue元件
- 【系統設計】設計一個限流元件元件
- 一個mount -a引發的ora-600案例分析
- 開發一個屬性名提示友好的Vue元件Vue元件
- 基於Vue開發一個日曆元件Vue元件
- 記一個複雜元件(Filter)的從設計到開發元件Filter
- iOS 同一個workspace下建立多個專案程式設計iOS程式設計
- 14.程式程式設計進階:函式的引數程式設計函式
- [Vue]vue核心面試題:元件中的data為什麼是一個函式Vue面試題元件函式
- 一個ES設定操作引發的“血案”
- Vue學習筆記(九):元件化程式設計Vue筆記元件化程式設計
- Vue-render函式的三個引數Vue函式
- 一個插排引發的設計思想 (三) 委託與事件事件
- 一個插排引發的設計思想 (二) 抽象類與介面抽象
- 寫一個VUE元件有感Vue元件