본문 바로가기

Programmer Jinyo/Developing

Vue.js 튜토리얼 한국어 링크


투명한 기부를 하고싶다면 이 링크로 와보세요! 🥰 (클릭!)

바이낸스(₿) 수수료 평생 20% 할인받는 링크로 가입하기! 🔥 (클릭!)

웹 프론트엔드 프레임워크 뷰 강의 링크이다.


1.


https://kr.vuejs.org/v2/guide/index.html


뷰 공식 한국어 튜토리얼. 한글화가 잘 되어있다.




2.


https://velopert.com/vuejs-tutorials


벨로퍼트님의 뷰 튜토리얼이다.




3.


http://vuejs.kr/2017/02/05/express-with-vue/


express를 통한 nodejs api 백엔드와 vue를 어떻게 붙이는지에 대한 환경 구성에 대한 글이다.




4.


https://router.vuejs.org/kr/guide/


vue로 프론트엔드 router을 구현할 수 있게 해준다.


http://blog.jeonghwan.net/2018/04/07/vue-router.html


이 링크도 참고할만하다.





5.


https://vuex.vuejs.org/kr/guide/


vuex 에 대한 글이다.




6.


https://vue-loader-v14.vuejs.org/kr/


vue-loader에 대한 글이다.




7.


https://joshua1988.github.io/web-development/vuejs/vuejs-tutorial-for-beginner/


vue.js 입문서

이 블로그의 다른 시리즈를 쭉 읽어보는 것도 도움이 된다.


http://blog.jeonghwan.net/tags.html#vue


이 블로그이 vue 태그도!


8.


https://blog.martinwork.co.kr/vuejs/2018/09/16/vue-jwt-application.html

http://blog.jeonghwan.net/2018/03/26/vue-authentication.html


vue로 jwt 로그인 인증 구현에 대한 글들이다.


위 링크는 회원가입 / 로그인 인증까지만 구현이 되어있고

아래 링크는 회원가입은 없지만 Vuex를 이용해서 로그인 상태 저장하는 곳 까지이다.


9.


https://lovemewithoutall.github.io/it/install-bootstrap-for-vue/


Vue는 외부 라이브러리를 불러와서 쓰는게 기존 방법과 다르다(!!!)


<script src=""/>어쩌고 하다가 호되게 당한 후로는 위의 방법 등으로 부트스트랩을 불러와서 쓰는 중이다.


10.


Vue에서 자바스크립트 불러오기


https://stackoverrun.com/ko/q/12506122



------------

개인적인 정리

------------


1. 튜토리얼



include 방법


HTML에 다음 구문 포함.

<script src="https://cdn.jsdelivr.net/npm/vue"></script>





선언적 렌더링 방법


HTML

<div id="app">
{{ message }}
</div>


JS

var app = new Vue({
el: '#app',
data: {
message: '안녕하세요 Vue!'
}
})


이 코드는 Vue 객체를 통해 id="app"인 곳 안쪽의 {{message}}를 data 안의 message value와 바인딩하는 코드이다.



디렉티브


텍스트를 넣는 것 뿐만 아니라, 엘리먼트(태그)의 속성도 지정해줄 수 있다.


HTML

<div id="app-2">
<span v-bind:title="message">
내 위에 잠시 마우스를 올리면 동적으로 바인딩 된 title을 볼 수 있습니다!
</span>
</div>


JS

var app2 = new Vue({
el: '#app-2',
data: {
message: '이 페이지는 ' + new Date() + ' 에 로드 되었습니다'
}
})


다음과 같이 해주면, 렌더링 시에


<span title="이 페이지는 Fri Dec 07 2018 20:23:33 GMT+0900 (한국 표준시)에 로드 되었습니다">

    내 위에 마우스를 올리면 동적으로 바인딩 된 title을 볼 수 있습니다!

</span>


다음과 같은 HTML이 렌더링 된다.


이 때, v-bind 속성을 "디렉티브" 라고 하는데, 디렉티브는 v-접두사가 붙은 모든 속성들을 의미한다.


디렉티브는 한국말로는 "지시자"라고 번역되고는 하는데, 주로 어떤 기능을 가진 DOM을 만들어낼 때 (즉 어떤 DOM의 보이거나 바뀌거나 하는 등의 행위를 지시할 때) 쓴다고 보면 된다.


vue에서 제공하는 뜻에서 v- 라는 접두사가 붙고, bind가 붙은 것으로 짐작할 수 있듯 title 속성은 data안의 message와 실시간으로 연동되어 변한다.



조건문


엘리먼트의 존재 여부를 정하는 조건문을 만들 수가 있는데,

HTML

<div id="app-3">
<p v-if="seen">이제 나를 볼 수 있어요</p>
</div>

JS


var app3 = new Vue({
el: '#app-3',
data: {
seen: true
}
})

소스에서 짐작할 수 있듯, seen 안에 들어있는 값에따라 p 태그를 볼 수 있는지 없는지가 결정된다. 즉, 돔의 구조또한 데이터와 바인딩 할 수 있음을 나타낸다.


console에 app3.seen = false 를 타이핑하면 p 태그를 보이지 않게 할 수 있다.



반복문


v-bind나 v-if 뿐만 아니라, v-for등을 이용하여 vue 엘리먼트가 vue 안에 CRUD될 때 자동으로 변화(트렌지션 효과)를 적용할 수도 있다.


HTML

<div id="app-4">
<ol>
<li v-for="todo in todos">
{{ todo.text }}
</li>
</ol>
</div>

JS

var app4 = new Vue({
el: '#app-4',
data: {
todos: [
{ text: 'JavaScript 배우기' },
{ text: 'Vue 배우기' },
{ text: '무언가 멋진 것을 만들기' }
]
}
})



만약 위와같은 소스코드에서 app4.todos.push({ text: 'New item' })을 입력하면 기존 목록에 새 항목이 추가되는 것을 볼 수 있다.



상호작용 (사용자 입력 핸들링)


v-on 디렉티브를 사용하면 이벤트 리스너를 사용해 사용자의 입력을 처리할 수 있다.

해당 태그를 통해 이벤트에 따라 Vue인스턴스에 메소드를 호출할 수 있다.


HTML

<div id="app-5">
<p>{{ message }}</p>
<button v-on:click="reverseMessage">메시지 뒤집기</button>
</div>


JS

var app5 = new Vue({
el: '#app-5',
data: {
message: '안녕하세요! Vue.js!'
},
methods: {
reverseMessage: function () {
this.message = this.message.split('').reverse().join('')
}
}
})


또한 v-model 디렉티브를 사용하면, 사용자의 입력과 앱의 상태를 양방향으로 바인딩하여 사용할 수 있다.


HTML

<div id="app-6">
<p>{{ message }}</p>
<input v-model="message">
</div>


JS

var app6 = new Vue({
el: '#app-6',
data: {
message: '안녕하세요 Vue!'
}
})





컴포넌트 시스템


Vue의 컴포넌트 시스템 또한 매우 중요한 기능 중 하나이다.


미리 정의된 템플릿을 묶어 재 사용 가능하게 만든다고 생각하면 편하게 이해할 수 있다.


컴포넌트 등록은 다음과 같이 할 수 있다.


// todo-item 이름을 가진 컴포넌트를 정의합니다
Vue.component('todo-item', {
template: '<li>할일 항목 하나입니다.</li>'
})



그리고 이를 렌더링 하는것은 아래와 같이 할 수 있다.


<ol>
<!-- todo-item 컴포넌트의 인스턴스 만들기 -->
<todo-item></todo-item>
</ol>




할 일을 렌더링 하는 함수를 조금 더 사용성 높게 바꿔보자.


prop 이라는 (사용자 정의 속성 같은) 것을 이용하여 사용자(혹은 상위 컴포넌트)로부터 할 일을 입력받을 수 있게 만들자.


Vue.component('todo-item', {
// 이제 todo-item 컴포넌트는 "prop" 이라고 하는
// 사용자 정의 속성 같은 것을 입력받을 수 있습니다.
// 이 prop은 todo라는 이름으로 정의했습니다.
props: ['todo'],
template: '<li>{{ todo.text }}</li>'
})

이 것은 이제 v-bind를 이용하여 각각의 반복되는 컴포넌트에게 전달할 수 있다.


HTML

<div id="app-7">
<ol>
<!--
이제 각 todo-item 에 todo 객체를 제공합니다.
화면에 나오므로, 각 항목의 컨텐츠는 동적으로 바뀔 수 있습니다.
또한 각 구성 요소에 "키"를 제공해야합니다 (나중에 설명 됨).
-->
<todo-item
v-for="item in groceryList"
v-bind:todo="item"
v-bind:key="item.id">
</todo-item>
</ol>
</div>



JS

Vue.component('todo-item', {
props: ['todo'],
template: '<li>{{ todo.text }}</li>'
})

var app7 = new Vue({
el: '#app-7',
data: {
groceryList: [
{ id: 0, text: 'Vegetables' },
{ id: 1, text: 'Cheese' },
{ id: 2, text: 'Whatever else humans are supposed to eat' }
]
}
})









디렉티브 정리


v-text


<span v-text="name"></span>


의 경우

Vue.name = "aaa" 이면

innerText = "aaa" 로 바꿔준다.


v-html


위와 마찬가지지만 innerHTML = "aaa"가 된다.


v-show


true / false


v-else


v-if와 같이 쓴다.


v-else-if도 있다.


v-pre


이 태그 안의 친구들은 vue 문법의 영향을 받지 않는다.


v-cloak


자바스크립트가 실행 되기전에, Vue 인스턴스가 제대로 준비되기 전 까지 템플렛을 위한 HTML 코드( {{name}}등 )를 숨기고 싶을 때 이 v-cloak 이라는 디렉티브를 사용한다.


v-cloak와 더불어 css에서 

[v-cloak]:{

display:none;

}


도 추가해줘야 한다.


v-once


처음 한번만 렌더링 후 더이상 binding하지 않는다.








2. 기능별 WIKI


필터링 기능

* vue.filter로 출력 전 필터를 할 수 있다.


HTML

{{'hello world' | capitalize}}


JS

Vue.filter('capitalize, function(string){

return string.charAt(0).toUpperCase() + string.slice(1,string.length)

})

new Vue({el:'#app'})




선택적으로 class 스타일 주기.


HTML

<div id="app">

  <textarea v-model="memeText" :class="{warn : longText}" :maxlength="limit">

  </textarea>

  {{memeText.length}}

</div>


JS

computed:{

  longText(){

    if(this.limit - this.memeText.length<=10) return true

    else return false

  }

}

data:{

  memeText:"aaa",

  limit:50

}


CSS

.warn {

  background-color:mistyrose

}


* 여러 클래스를 주고 싶으면 다음과 같이 쓰면 된다.


:class="{class1:var1 , class2:var2 , .....}"


그리고 이것은 다음과 같이 정리될 수 있다.


:class="classes"


data:{

  classes:{

    class1:var1,

    class2:var2,

    ....

  }

}


조금 더 현명하게 수정하는 방식은


computed:{

  classes(){

    const longText = ~~~~

    return{

      class1:longText,

      class2: ~~......}

  }

}


이런 식으로 계산하기 편하게 묶어서 만들어주는 것이다.