๊ณต์ API ํํ์ด์ง> http://postcode.map.daum.net/guide
1. script์ postcode ์ถ๊ฐ
index.html์ ์๋์ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐ
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
2. ์ฃผ์ ๊ฒ์ ๋ฒํผ ๊ตฌํ (pages/ShopBasketPage.vue)
- ์ฃผ์ ์ ๋ ฅ ๋ฒํผ ํด๋ฆญ ์, showApi() ์คํ
- api์์ ์ฃผ์ ์ ํํ๋ฉด ์์ธ ์ฃผ์ ์ ๋ ฅ ๋ชจ๋ฌ ์ฐฝ ๋ํ๋ด๊ธฐ
- ์์ธ ์ฃผ์ ์ ๋ ฅ ํผ์์ ์ ์ฅ ๋ฒํผ ํด๋ฆญ ์, setAddress() ์คํ
2-1) ํ ํ๋ฆฟ ์ฝ๋
<template>
<div id="shopbasketpage">
<div id="form">
<div>
<b-icon icon="geo-alt"></b-icon>๋ฐฐ์ก์ง
</div>
<-- ์ฃผ์ ๊ฒ์ ๋ฒํผ -->
<button class="button-style1" @click="showApi">์ฃผ์ ๊ฒ์</button>
<-- ์์ธ ์ฃผ์ ์
๋ ฅ ํผ -->
<div>
<b-modal id="modal" ref="addr2-modal" hide-footer title="์์ธ ์ฃผ์ ์
๋ ฅ" centered>
<div class="d-block">
<div class="d-addr1">{{ addr.addr1 }}</div>
<div class="d-addr2">
<input
type="text"
required
v-model="addr.addr2"
@keyup.enter="setAddress(addr)"
placeholder="๋๋จธ์ง ์ฃผ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์"/>
</div>
</div>
<div class="d-btns">
<b-button type="reset" @click="addr.addr2 = '';">๋ฆฌ์
</b-button>
<b-button type="submit" variant="primary" @click="setAddress(addr)">์ ์ฅ</b-button>
</div>
</b-modal>
</div>
</div>
</div>
</template>
2-2) ์คํฌ๋ฆฝํธ ์ฝ๋
<script>
export default {
name: "ShopBasketPage",
data() {
return {
addr:
{
zip: '',
addr1: '',
addr2: '',
}
}
},
methods: {
showApi() {
new window.daum.Postcode({
oncomplete: (data) => {
let fullRoadAddr = data.roadAddress; // ๋๋ก๋ช
์ฃผ์ ๋ณ์
let extraRoadAddr = ''; // ๋๋ก๋ช
์กฐํฉํ ์ฃผ์ ๋ณ์
if(data.bname !== '' && /[๋|๋ก|๊ฐ]$/g.test(data.bname)){
extraRoadAddr += data.bname;
}
if(data.buildingName !== '' && data.apartment === 'Y'){
extraRoadAddr += (extraRoadAddr !== '' ? ', ' + data.buildingName : data.buildingName);
} // ๋๋ก๋ช
, ์ง๋ฒ ์กฐํฉํ ์ฃผ์๊ฐ ์์ ๊ฒฝ์ฐ, ๊ดํธ๊น์ง ์ถ๊ฐํ ์ต์ข
๋ฌธ์์ด์ ๋ง๋ ๋ค.
if(extraRoadAddr !== ''){
extraRoadAddr = ' (' + extraRoadAddr + ')';
} // ๋๋ก๋ช
, ์ง๋ฒ ์ฃผ์์ ์ ๋ฌด์ ๋ฐ๋ผ ํด๋น ์กฐํฉํ ์ฃผ์๋ฅผ ์ถ๊ฐํ๋ค.
if(fullRoadAddr !== ''){
fullRoadAddr += extraRoadAddr;
} // ์ฐํธ๋ฒํธ์ ์ฃผ์ ์ ๋ณด๋ฅผ ํด๋น ํ๋์ ๋ฃ๋๋ค.
this.addr.zip = data.zonecode; //5์๋ฆฌ ์์ฐํธ๋ฒํธ ์ฌ์ฉ
this.addr.addr1 = fullRoadAddr;
this.$refs['addr2-modal'].show() //์์ธ ์ฃผ์ ์
๋ ฅ ๋ชจ๋ฌ ์ฐฝ ๋ณด์ด๊ธฐ
}
}).open()
},
},
};
</script>
3. ์ ๋ ฅํ ์ฃผ์ vuex์ ์ ์ฅ (store/index.js)
export const store = new Vuex.Store({
state: {
//ordersheet ์คํ
์ดํธ ์ถ๊ฐ
ordersheet: {
addr: '',
orderProduct: '',
}
},
actions: {
setAddress({commit},addr) {
commit("setAddress", addr);
}
},
mutations: {
setAddress(state, addr) {
console.log("setAddress");
console.log("addr ", addr);
state.ordersheet.addr = addr; //ordersheet ์คํ
์ดํธ์ addr์ ๊ฐ์ ์
๋ ฅํ ๊ฐ์ผ๋ก ์ ์ฅ
},
},
})
'๐ก์น ํ๋ก์ ํธ > (ํ๋ก ํธ์๋) ๋ง์ผ์ปฌ๋ฆฌ - ํด๋ก ์ฝ๋ฉ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ํ ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ (0) | 2021.08.05 |
---|---|
vuex ์ํ๋ณ ๋ฆฌ๋ทฐ ๋ทฐ์ด (0) | 2021.07.20 |
vuex ์ฅ๋ฐ๊ตฌ๋ ๊ตฌํ (0) | 2021.07.18 |
vuex ๋ฐ์ดํฐ ์ ๋ฌ(์์->ํ์) (0) | 2021.07.17 |
vue์ ๋ถํธ์คํธ๋ฉ ์ ์ฉ (0) | 2021.07.16 |