프로젝트/네이버 api를 이용한 검색사이트
네이버 api를 이용한 검색 사이트 (5)
lroot
2022. 10. 6. 02:55
728x90
반응형
1) front - end 구현
main.html
<!DOCTYPE html>
<html lang="ko" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Search WISH LIST</title>
</head>
<body>
<br/>
<div class="container">
<!-- search -->
<div class="row">
<div class="col-sm-6 col-md-8">
<input id="searchBox" style="height: 46px" class="form-control form-control-lg" type="text" placeholder="검색해주세요 ex.(판교 갈비집)" value="갈비집">
</div>
<div class="col-sm-6 col-md-4">
<button id="searchButton" type="button" class="btn btn-primary btn-lg" style="width: 100%">검색</button>
</div>
</div>
<br/>
<!-- search result -->
<div class="row" id="search-result" style="visibility: hidden">
<div class="col-sm-6 col-md-8">
<img id="wish_image" v-bind:src="search_result.imageLink" alt="..." class="img-thumbnail" style="min-width: 100%; min-height: 100%;">
</div>
<div class="col-sm-6 col-md-4">
<ul class="list-group list-group-flush">
<li class="list-group-item" id="wish_title">{{search_result.title}}</li>
<li class="list-group-item" id="wish_category">{{search_result.category}}</li>
<li class="list-group-item" id="wish_address">{{search_result.address}}</li>
<li class="list-group-item" id="wish_road_address">{{search_result.roadAddress}}</li>
<li class="list-group-item"><a id="wish_link" target="_blank" v-bind:href="search_result.homePageLink">홈페이지</a> </li>
</ul>
<button id="wishButton" type="button" class="btn btn-primary btn-lg" style="width: 96%; position: absolute; bottom: 0">위시리스트 추가</button>
</div>
</div>
<br/><br/><br/>
<div class="row">
<div class="alert alert-info col-sm-12 col-md-12" style="text-align: center">
Search 리스트
</div>
</div>
<br/>
<div id="wish-list">
<div v-for="wish in wish_list">
<br/><hr/>
<div class="row">
<div class="col-sm-6 col-md-8">
<img v-bind:src="wish.imageLink"
alt="..."
class="img-thumbnail"
style="min-width: 100%;
min-height: 100%;"
>
</div>
<div class="col-sm-6 col-md-4">
<ul class="list-group list-group-flush">
<li class="list-group-item">장소 : {{wish.title}}</li>
<li class="list-group-item">Category : {{wish.category}}</li>
<li class="list-group-item">주소 : {{wish.address}}</li>
<li class="list-group-item">도로명 : {{wish.roadAddress}}</li>
<li class="list-group-item">방명여부 : {{wish.visit}}</li>
<li class="list-group-item">마지막 방문일자 : {{wish.lastVisitDate}}</li>
<li class="list-group-item">방문횟수 : {{wish.visitCount}}</li>
<li class="list-group-item">
<a href="http://imf0010.cafe24.com/m/imf0020">홈페이지</a>
</li>
<li class="list-group-item">
<button v-on:click="addVisit(wish.index)" type="button" class="btn btn-primary btn-lg" style="width: 100%;">방문 추가</button>
<br/><br/>
<button v-on:click="deleteWish(wish.index)" type="button" class="btn btn-primary btn-lg" style="width: 100%;">위시리스트 삭제</button>
</li>
<li class="list-group-item"></li>
</ul>
</div>
<br/>
</div>
<hr>
</div>
</div>
</div> <!-- container end -->
</body>
<!-- jQuery (부트스트랩의 자바스크립트 플러그인을 위해 필요합니다) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<!-- CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<!-- 합쳐지고 최소화된 최신 자바스크립트 -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<!-- 개발버전, 도움되는 콘솔 경고를 포함. -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="/main.js"></script>
</html>
main.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | (function ($) { // 검색 결과 vue object var search_result = new Vue({ el: '#search-result', data: { search_result : {} }, method: { wishButton: function (event) { console.log("add"); } } }); // 목록 vue object var wish_list = new Vue({ el: '#wish-list', data: { wish_list : {} }, methods: { addVisit: function (index) { $.ajax({ type: "POST" , async: true , url: `/api/${index}`, timeout: 3000 }); getWishList(); }, deleteWish: function (index) { $.ajax({ type: "DELETE" , async: true , url: `/api/${index}`, timeout: 3000 }); getWishList(); } } }); // search $("#searchButton").click(function () { const query = $("#searchBox").val(); $.get(`/api/search?query=${query}`, function (response) { search_result.search_result = response; $('#search-result').attr('style','visible'); }); }); // Enter $("#searchBox").keydown(function(key) { if (key.keyCode === 13) { const query = $("#searchBox").val(); $.get(`/api/search?query=${query}`, function (response) { search_result.search_result = response; $('#search-result').attr('style','visible'); }); } }); $("#wishButton").click(function () { $.ajax({ type: "POST" , async: true , url: "/api", timeout: 3000, data: JSON.stringify(search_result.search_result), contentType: "application/json", error: function (request, status, error) { }, success: function (response, status, request) { getWishList(); } }); }); function getWishList(){ $.get(`/api/all`, function (response) { wish_list.wish_list = response; }); } $(document).ready(function () { console.log("init") }); })(jQuery); | cs |
2) 화면
- 검색
- 위시리스트 추가
- 방문 추가
- 위시리스트 삭제