Vue實(shí)現(xiàn)PopupWindow組件詳解
這段時(shí)間一直在學(xué)習(xí)前端技術(shù)來(lái)完成自己的小項(xiàng)目。在js方面就使用了Vue框架。由于在項(xiàng)目里想實(shí)現(xiàn)一個(gè)新建地址的PopupWindow效果,便想到可以使用Vue的一些特性來(lái)實(shí)現(xiàn)。
用到的Vue特性:組件(Component),props傳值,slot內(nèi)容插入,transitions過(guò)渡動(dòng)畫(huà),x-templete模板。
直接上代碼(完整代碼可在鏈接中下載popupwindow):
html代碼(無(wú)樣式):
<div id="address-choose">
<div>
<button @click="showOneBtnWindow()">顯示</button>
</div>
<new-address-window
v-show="isShowEditWindow"
@close="removeEditWindow()"
:addressregion="addressRegion">
<!--使用插槽顯示不同的title-->
<p slot="edit-window-title">
{{editTitle}}
</p>
<div slot="popup-btn-container">
<button>保存</button>
<button>刪除</button>
</div>
</new-address-window>
</div>
<!--新建地址popupwindow模板-->
<script type="text/x-template" id="popup-window-address-new">
<transition name="popup-window-transition">
<div>
<slot name="edit-window-title">
<p>新建收貨地址</p>
</slot>
</div>
<div>
<p>收貨人</p>
<input type="text" :value="addressregion.name"/>
</div>
<div>
<p>選擇地區(qū)</p>
<ul>
<li>{{addressregion.province}}</li>
<li>{{addressregion.city}}</li>
<li>{{addressregion.region}}</li>
</ul>
</div>
<div>
<p>聯(lián)系電話(huà)</p>
<input type="text" placeholder="手機(jī)號(hào)"/>
</div>
<div>
<p>詳細(xì)地址</p>
<input type="text" placeholder="如街道、樓層、門(mén)牌號(hào)等"/>
</div>
<div>
<p>郵政編碼</p>
<input type="text" placeholder="郵政編碼(選填)"/>
</div>
<div>
<slot name="popup-btn-container">
<button class="btn btn-success">保存</button>
<button class="btn btn-danger">刪除</button>
</slot>
</div>
</div>
</transition>
</script>
js代碼:
/*
* 新建與編輯地址Vue組件popupwindow
* */
var newAddressWindow = Vue.component("new-address-window",{
props: ['addressregion'],
template: "#popup-window-address-new"
})
/*
* 地址popupwindow的Vue實(shí)例
* */
var chooseAddress = new Vue({
el: "#address-choose",
data: {
isShowEditWindow: true,
isOneButton: false,
editTitle: "新建收貨地址",
//填入初始地址信息,組件與改數(shù)據(jù)綁定
addressRegion: {
}
},
methods: {
showOneBtnWindow: function(){ //顯示新建收貨地址對(duì)話(huà)框(有一個(gè)按鈕)
this.isShowEditWindow = true;
this.isOneButton = false;
this.editTitle = "新建收貨地址";
},
removeEditWindow: function(){ //關(guān)閉新建與編輯地址選擇對(duì)話(huà)框
this.isShowEditWindow = false;
}
}
})
至此,一個(gè)popupwindow的組件就完成了。在實(shí)現(xiàn)一個(gè)Vue組件時(shí),可以使用模板來(lái)實(shí)現(xiàn)組件,我這里采用了x-templete模板實(shí)現(xiàn)了組件,同時(shí)在組件通也可以使用vue的transition特性加入一些動(dòng)畫(huà)效果。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue項(xiàng)目中請(qǐng)求數(shù)據(jù)特別多導(dǎo)致頁(yè)面卡死的解決
這篇文章主要介紹了vue項(xiàng)目中請(qǐng)求數(shù)據(jù)特別多導(dǎo)致頁(yè)面卡死的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
vue項(xiàng)目使用jszip和file-saver批量打包壓縮圖片或附件方式
這篇文章主要介紹了vue項(xiàng)目使用jszip和file-saver批量打包壓縮圖片或附件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
解決VUE打包后與nginx代理出現(xiàn)加載速度超級(jí)慢的問(wèn)題
這篇文章主要介紹了解決VUE打包后與nginx代理出現(xiàn)加載速度超級(jí)慢的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
vue跳轉(zhuǎn)方式(打開(kāi)新頁(yè)面)及傳參操作示例
這篇文章主要介紹了vue跳轉(zhuǎn)方式(打開(kāi)新頁(yè)面)及傳參操作,結(jié)合實(shí)例形式分析了vue.js跳轉(zhuǎn)實(shí)現(xiàn)方式與參數(shù)接受相關(guān)操作技巧,需要的朋友可以參考下2020-01-01
Vue組件的計(jì)算屬性和普通屬性的區(qū)別說(shuō)明
這篇文章主要介紹了Vue組件的計(jì)算屬性和普通屬性的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
VUE動(dòng)態(tài)綁定class類(lèi)的三種常用方式及適用場(chǎng)景詳解
文章介紹了在實(shí)際開(kāi)發(fā)中動(dòng)態(tài)綁定class的三種常見(jiàn)情況及其解決方案,包括根據(jù)不同的返回值渲染不同的class樣式、給模塊添加基礎(chǔ)樣式以及根據(jù)設(shè)計(jì)確定是否使用多個(gè)樣式2025-01-01

