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 - Vue元件化程式設計Vue元件化程式設計
- Vue一個案例引發「內容分發slot」的最全總結Vue
- Vue案例引發的「巢狀元件」通訊的簡單方式Vue巢狀元件
- 一個引發程式設計師們幹架的問題程式設計師
- Vue案例引發的「過濾器」的使用Vue過濾器
- 一個map函式引發的血案函式
- 從函式式元件引發的效能思考函式元件
- 【系統設計】設計一個限流元件元件
- iOS 同一個workspace下建立多個專案程式設計iOS程式設計
- go 併發程式設計案例一 課程介紹Go程式設計
- 一個mount -a引發的ora-600案例分析
- 記一個複雜元件(Filter)的從設計到開發元件Filter
- 如何開發一個基於 Vue 的 ui 元件庫(一)VueUI元件
- Vue學習筆記(九):元件化程式設計Vue筆記元件化程式設計
- 開發一個屬性名提示友好的Vue元件Vue元件
- 一個ES設定操作引發的“血案”
- Vue-render函式的三個引數Vue函式
- 物件導向程式設計從小白到王者系列-建立我的第一個程式物件程式設計
- windows程式設計師開發linux程式的頭一個月Windows程式設計師Linux
- 設計一個基於svg的塗鴉元件(一)SVG元件
- 一個故事搞懂Java併發程式設計Java程式設計
- 程式設計師跟產品經理打起來了,這是一個需求引發的血案...程式設計師
- vue全家桶 ---建立一個新的vue專案Vue
- [Vue]vue核心面試題:元件中的data為什麼是一個函式Vue面試題元件函式
- 如何開發一個基於 Vue 的 ui 元件庫(二)VueUI元件
- 一次Toast元件引發的思考AST元件
- 函式計算實踐——一個應用案例函式
- 從Lisp到Vue、React再到 Qwit:響應式程式設計的發展歷程LispVueReact程式設計
- Map-Reduce 思想在 ABAP 程式設計中的一個實際應用案例程式設計
- [Vue 牛刀小試]:第十四章 - 程式設計式導航與實現元件與 Vue Router 之間的解耦Vue程式設計元件解耦
- 貢獻你的力量 開發一個Vue元件併發布到npmVue元件NPM
- 畫江湖之 PHP 多程式開發 [建立一個新的程式]PHP
- 畫江湖之 PHP 多程式開發 【建立一個新的程式】PHP