Frond-end/Vue

Vue3 샘플 페이지 만들기

Nellie Kim 2023. 12. 1. 10:39
728x90

 

 

샘플 1

<!DOCTYPE html>
<html lang="en">
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/sweetalert2@10"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>연습용!!ㅋㅋㅋ</title>
</head>
<body>   
    <!-- 바메스 -->
    <main id="app">
        <h2>{{name}}</h2>
        <h2 v-text="name">이름</h2>
        <h2>{{job}}</h2>
    </main>
    
    <script>
        // A. 서버에서 가져온 데이터
        let introduceData = {
            "name" : "홍길동",
            "job" : "개발자"
        };

        // B. 뷰 생성 
        let introduceTemplate = new Vue({
            // 엘데메마 
            el : "#app", // 1. 이 뷰 인스턴스가 적용될 html엘리먼트 지정!!! 

            data(){ // 2. 이 뷰 인스턴스가 반환할 데이터 지정
                return{
                    name : "",
                    job : ""
                }
            },

            methods : { // 3. 메소드 생성 (서버에서 받아온 데이터를 뷰 데이터에 선언하기 등)
                fetchUser(){
                    // 3-1) 서버에서 받아온 데이터 가져와
                    let result = introduceData;

                    // 3-2) 서버에서 받아온 데이터를 뷰 데이터로 옮겨
                    this.name = result.name; // 홍길동
                    this.job = result.job; // 개발자
                }
            },
            
            mounted(){ // 4. 최초에 데이터를 렌더링할 때 1번
                this.fetchUser();
            }
        })
    </script>
</body>
</html>

 

 

 

샘플 2

<!DOCTYPE html>
<html lang="en">
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/sweetalert2@10"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <main id="app">
        <h2 v-text="main_title">Hello, Vue.js</h2>
        <h3 v-text="main_content">Hi</h3>
        <!-- 반응형 태그 -->
        <h3>{{main_content2}}</h3> 
        
        <div v-if="today_weather_show_flg">
            <h4>{{today_weather}}</h4>
            <button @click="fetchWeather">오늘의 날씨보기</button>
        </div>
        <div v-else>

            <h3>오늘의 운세</h3>
            <h4>{{today_lucky}}</h4>
        </div>
        <div>
            <ul>
                <li v-for="book in user_books">
                    <h5>{{book.title}}</h5>
                    <h5>{{book.author}}</h5>
                </li>
            </ul>
        </div>
    </main>
<script>

    //server에서 가져온 데이터1
    //{"api/custId}"
    let introduceData = {
        "name" : "김길동",
        "job" : "developer",
        "weatherServiceAgreeYn" : "N",
        "lucky" : "좋음"
        
    };

    //server에서 가져온 데이터2
    //"api/{custId}/{books}"
    let bookData = {
        books : [
            {
                title : "자바8과 스프링",
                author : "김민규"
            },
            {
                title : "목민심서",
                author : "정약용"
            }
        ]
    }

    let weatherData = {
        "today" : "흐림"
    }

    // 뷰 생성 -----------------
    let introduceTemplate = new Vue({
        el : "#app",
        data(){
            return{
                main_title : "길동의 자기소개 페이지",
                main_content : "안녕하세요!!",
                main_content2 : "반갑습니다^^",
                today_weather: "",
                today_weather_click_cnt : 0,
                today_weather_show_flg : false,
                today_lucky : "",
                user_books : []
            }
        },
        methods : {
            fetchUser(){
                // server Ajax
                let result = introduceData;
                // data change
                this.main_title = result.name;
                this.main_content = result.job;

                //날씨를 노출할지 안할지 로직을 만들자.
                if(result.weatherServiceAgreeYn == "Y"){
                    this.today_weather_show_flg = true;
                }else{
                    this.today_weather_show_flg = false;
                }
                if(result.weatherServiceAgreeYn == "N"){
                    this.today_lucky = result.lucky;
                }
            },
            fetchWeather(){
                // server Ajax
                let result = weatherData;
                // data change
                this.today_weather = weatherData.today;
            },

            //책리스트도 서버에서 가져와서, 최초 데이터렌더링때 사용
            fetchBooks(){
                let result = bookData;
                let books = bookData.books;
                this.user_books = books;
            }
        },

        //최초에 데이터를 렌더링할 때 1번
        mounted(){
            this.fetchUser();
            this.fetchBooks();
        }

    })
</script>
</body>
</html>