directive란?
html태그 안에 v-접두사를 가지는 모든 속성을 의미한다.

v-if는 지정한 뷰 데이터 값이 true, false여부에 따라서 해당 html태그를 화면에 표시하거나 표시하지 않는다.
v-else
v-show가 true일때 보여준다 if하고 show가 유사하다
차이점 if 는 element가 삭제 show는 style에 display만 none으로 변경

template를 이용하여 묶어서 처리 가능하다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <h1>directive</h1>
        <button v-on:click="change">Click me</button>
        <div v-if="showMe">안녕 Vue~~</div>
        <div v-else>잘가~~</div>
        
        <hr color='red'>
        <button v-show="showMe" v-on:click="change">v-showTest</button>
        
        <hr color='blue'>

        <template v-if="showMe">
            <h1>안녕</h1>
            <p>반가워</p>
            <button>나 버튼이야</button>
        </template>
        <template v-else>
            <h1>Hi</h1>
            <p>Good</p>
            <button>I'm button</button>
        </template>
        
    </div>
    <script>
        new Vue({
            el:'#app',
            data:{
                showMe:false
            },
            methods:{
                change:function(){
                    this.showMe=!this.showMe
                }
            }
        })
    </script>
</body>
</html>

v-bind
v-bind는 html태그의 기본 속성과 vue의 데이터 속성을 연결할 때 사용한다.
v-bind는 ":속성"으로 줄여쓸 수 있다.

v-bind예제1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <h1>Directive: v-bind</h1>
        <input type="text" placeholder="Message"><br>
        <input type="text" v-bind:placeholder="msg1"><br>
        <input type="text" :value="msg2"><br>
        <img :src="imgPath" :width="imgW" :height="imgH">
    </div>
    <script>
        new Vue({
            el:'#app',
            data:{
                msg1:'이름을 입력하세요',
                msg2:'아이디를 입력하세요',
                imgPath:'images/bts.jpg',
                imgW:200,
                imgH:180
            }
        })

    </script>
</body>
</html>

v-bind예제2
v-on:clock은 @click으로 축약가능하다.
여러개 할 경우 카멜표기법과 쉼표(,)를 이용해서 작성한다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <h1>style 바인딩</h1>
        <button @click="change">Click Me ({{btnTxt}})</button>
        <div style="color:red;font-size:20pt">div1</div>
        <div v-bind:style="{border:(visible)?'thick dashed orange':'thin solid gray'}">div2</div>
        <div :style="{backgroundColor:'yellow', fontSize:'3px',padding:'2em'}">Hello~</div>
    </div>
    <script>
        new Vue({
            el:'#app',
            data:{
                visible:false,
                btnTxt:'On'
            },
            methods:{
                change:function(){
                    this.btnTxt=this.visible?'Off':'On';
                    this.visible=!this.visible;
                }
            }
        })
    </script>
</body>
</html>

class binding
class를 동적으로 바꿔줄 수 있음

//el:'#app'과 똑같은 것
new Vue({

}).$mount('#app')
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style>
        .good{
            background-color: palevioletred;
            color:peachpuff;
            font-size:2em;
        }
        .bye{
            background-color:powderblue;
            color: royalblue;
            font-size: 1.2em;
        }
    </style>
</head>
<body>
    <div id="app">
        <h1>class 바인딩</h1>
        <button @click="change">Click Me({{btnTxt}})</button>
        <div 
        :class="{good:visible,bye:!visible}"
        :style="{width:'200px',height:'200px',border:'2px solid pink',margin:'20px'}">
            div1
        </div>
    </div>
</body>
</html>
<script>
    new Vue({
        data:{
            visible:false,
            btnTxt:'On'
        },
        methods:{
            change:function(){
                this.visible=!this.visible
                this.btnTxt=this.visible?"Off":"On";
            },
            
        }

    }).$mount('#app')

</script>

 

+ Recent posts