스크립트 설명
temp 밑에 만들었던 파일 index.
이렇게 하면 작동하는가?
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>연습1</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<h1>연습1</h1>
<div id="app">
{{ message }}
</div>
<button onclick="num()">넘버 실행</button>
</body>
<script>
let app = new Vue({
el: '#app',
data: {
message:'안녕? Vue?'
}
});
function num() {
let num = 10;
if(num == 10) {
alert('true');
}
}
</script>
</html>
저장하고 돌려보면 작동함.
얘는 왜 작동하나?
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>연습1</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<h1>연습1</h1>
<div id="app">
{{ message }}
</div>
<button onclick="num()">넘버 실행</button>
</body>
<script>
let app = new Vue({
el: '#app',
data: {
message:'안녕? Vue?'
}
});
let num = function() {
let num = 10;
if(num == 10) {
alert('true');
}
}
</script>
</html>
이런 모양도 많이 등장할 것임.
let num = function() {
let num = 10;
if(num == 10) {
alert('true');
}
}
자주 볼 부분.
호이스팅!
추론 타입 (타입 안 적어줘도 된다)
//var let const
var n = 10;
let nn = 'A'; //ES6
const nu = 100; //const 변수는 초기값을 변경할 수 없지만 const 객체/배열은 그 요소를 변경할 수 있다.
//변수값 재할당X, 내부요소 변경 O
여기서 nu
를 바꾸면 에러가 날까?
nu = 10;
보다시피 재할당 불가능
이건 된다.
const group = {name : "애플이", age : 38}
group.age = 250;
출력해보기
const group = {name : "애플이", age : 38}
group.age = 250;
console.log(group.name, group.age);
// ES6??
let {name, age} = group;
console.log(name, age);
둘다 잘 나온다
연산자 순서...
- 산술 연산자
- 문자 연결 연산자 +
console.log("HI " + "JS");
- 할당 연산자 (값 대입)
var v = 10;
- 비교 연산자
1 > 7
- 논리 연산자
true && false
- 삼항 연산자
조건문 ? 참 : 거짓;
화살표 함수 =>
파라미터... 는 파라미터 여러 개 라는 뜻.
let 함수 이름 = (파라미터...) => 명령문
check = () => { console.log('check'); } check(); //화살표 함수 : ES6때 도입, function 키워드로 만들어지는 것보다 화살표를 사용해 함수를 더 간단히 표현.
//콜백 함수 : 파라미터로 함수를 전달받아 내부에서 실행하는 함수
function timeCheck() {
setTimeout(() => {
console.log('timeCheck함수가 실행됩니다.');
}, 3000);
}
function lastCheck(){
console.log('lastCheck함수가 실행됩니다.');
}
timeCheck();
lastCheck();
lastCheck()이 먼저 실행, 다음에 timeCheck()
lastCheck()을 timeCheck()에 콜백함수로 넣으면
//콜백 함수 : 파라미터로 함수를 전달받아 내부에서 실행하는 함수
function timeCheck(callback) {
setTimeout(() => {
console.log('timeCheck함수가 실행됩니다.');
callback();
}, 3000);
}
function lastCheck(){
console.log('lastCheck함수가 실행됩니다.');
}
timeCheck(lastCheck);
timeCheck() 다음에 lastCheck()이 실행.
https://www.lydiahallie.com/blog/promise-execution
https://joshua1988.github.io/web-development/javascript/promise-for-beginners/
//프로미스 : 대기, 이행, 실패 상태를 가짐. (비동기 관련 객체)
// 통신 완료하고 진짜 성공했을 때 -> 이행? 새로 만들어줄 수 있다.
let promise = new Promise(function (resolve, reject){
resolve(value);//성공
reject(err);//오류
});
// 성공했을 때는 then으로 가져올 수 있다.
promise.then(function(value){// 성공
console.log(value);
});
promise.catch(function(err){// 실패
});
이거 하고 나면 JS 기본은 끝난 것.
//콜백 함수와 프로미스의 단점을 극복하고 가독성을 높인 async, await
//async는 함수 앞에 붙여요
//await은 async 함수 내에 작성해요. 동기식처럼 프로미스 처리가 끝날 때까지 기다립니다.
async function print1() {
let promise2 = new Promise(function (resolve, reject){
setTimeout(() => resolve('성공'), 1000);
});
let result = await promise2; // promise2를 기다려서 그 결과를 반환받을 것.
console.log(result);
}
print1();
결과는
1초 뒤 성공
이 출력된다. 이 성공
은... 어떻게 들어가게 되는건지..
-> resolve()에 전달된 값은 PromiseResult에 들어간다고 한다
(print()
는 이미 있는 함수)
https://velog.io/@seul06/JavaScript-%EC%BD%9C%EB%B0%B1-%EC%A7%80%EC%98%A5
//예외처리
async function 함수() {
try {
await 실행함수();
} catch (error) {
//예외 발생 시 처리할 내용;
}
}
//배열
// arr01 1, 2, 3, 4, 5 저장
const arr01 = [1, 2, 3, 4, 5];
alert(arr01[0]); // 1
alert(arr01.length); // 5
arr01.push(6);
console.log(arr01);
arr01.unshift(0);
console.log(arr01);
//pop 마지막 요소를 꺼냄. = 배열 요소 삭제
console.log(arr01.pop()); // 6
console.log(arr01); // [0, 1, 2, 3, 4, 5]
// pop push == 스택(stack) == 후입선출(LIFO)
// shift() = 배열의 첫 번째 요소를 삭제합니다.
// 10 제거
console.log(arr01.shift()); // 0
console.log(arr01); // [1, 2, 3, 4, 5]
//splice() == 배열에서 특정 위치에 새로운 요소를 추가 / 특정 요소에 있는 값을 수정
//배열명.splice(추가/삭제할 위치, 삭제할 수, 추가할 요소)
arr01.splice(0, 0, 100); // unshift() 같은 효과
console.log(arr01); // [100, 1, 2, 3, 4, 5]
arr01.splice(1, 1);
console.log(arr01); // [100, 2, 3, 4, 5]
//맨 뒤에 있는 요소를 삭제해서 [100, 2, 3, 4]
console.log('삭제 전: ' + arr01);
arr01.splice(arr01.length-1, 1);
console.log('삭제 후: ' + arr01);
cmd에서
cd c:\
cd vue
dir
vue create mar27
그러면 mar27 이름의 vue 디렉터리가 생긴다.
cd mar27
npm run serve
npm --version
npm -v
npm help
npm install
npm serve
localhost:8080 <- 나온다.
localhost:80 <- 줄일 수도 있다.
그동안 배워온 거. 전통적
V : jsp, thymeleaf
M : DB에서...
C : 흐름 들어오는 거 제어
이제는 V가 빠질 것
백단: M, C
프단: V -> react, vue
스벨트가 새로나왔다?? 현업에서 어떻게 될지 모름..
vue - MVVM 패턴
Model-View-ViewModel
데이터담당 Model = 자바랑 동일
UI담당 View = 자바랑 동일
상태, 동작을 정의, 데이터 바인딩 ViewModel = 새로움
vue는 재사용할 수 있는 UI를 묶어 화면을 컴포넌트로 구성
독립적인 기능, 상태를 가질 수 있게 하고
필요시 컴포넌트를 조합하여 사용하는 템플릿 기반
백단으로는 M, C만 만든다.
프론트단에서는 V를 한다.
조금 더 바뀐다면...
자바 없이도 다 할 수 있을 것. vue
자체 서버 구동할 수 있는 express가 있다. tomcat같은 애
자체 서버가 되고 자체 db도 되고 자체 컨트롤러, 자체 뷰
확장 스크립트까지 배우면 다 할 수 있다고,,,
node 덕분에 가능해졌다.
아직까지는 MVC를 많이 사용한다.
VSCode에서 vue 폴더 열고 terminal 열고
npm run serve
public/index.html
기본 틀에
<div id="app"></div>
이것만 알면 됨.
noscript는 script 동작 안하는 브라우저에서 나오는 거
src/App.vue
템플릿 기반.
template -> 진짜 화면에 뿌려줄 것.
script -> 약간 변경된 js 문법
style
import 컴포넌트
화면에 불러올 단위
게시판 컴포넌트, 로그인 컴포넌트 등
index.html 고치는 게 아니라 컴포넌트 교체.
컴포넌트 교체하는 명령을 내리기 위해서 새 페이지 만들기도 할 거다.
import로 불러온 컴포넌트는 template에서 쓴다.
틀에서 컴포넌트가 바뀌고 들어오고 하는 건데 전체가 바뀐듯한 느낌인 것.
이러면 그 어떤 뷰도 부르지 않고 안보이는 것.
index.html div app에 script, style, template이 들어가는 것.
script가 먼저 읽어서...(?)
import -> export -> template (HelloWorld...) App.vue에 그린 그림
지금은 안쓴다
App.vue
<template>
<h1>연습중</h1>
<div>
이름 : {{ name }}<br>
나이 : {{ human.age }}<br>
사는 곳 : {{ human.addr }}<br>
</div>
</template>
<script>
export default {
name: 'App',
components: {},
data(){
return{
//jsx
name : '김채원',
human : {name : '쟝원영', age : 38, addr: '한양'}
}
}
}
</script>
jsx라고도 한다고 한다.
템플릿 밑줄은 h1태그를 div 안에 넣으면 해결.
하나의 div로 묶여야한다고 저번시간에 들은거같다.
v-어쩌구
=> vue니까 전부 이런 식. 타임리프랑 비슷하다
<template>
<div>
<h1>연습중</h1>
이름 : {{ name }}<br> <!-- 머스타치 -->
이름 : <span v-text="name"></span> <br>
나이 : {{ human.age }}<br>
사는 곳 : {{ human.addr }}<br>
</div>
</template>
mustache와 결과는 같다.
html 코드 쓰는 거
<template>
<div>
<h1>연습중</h1>
이름 : {{ name }}<br> <!-- 머스타치 -->
이름 : <span v-text="name"></span> <br>
이름 : <span v-html="name + '<br>'"></span>
나이 : {{ human.age }}<br>
사는 곳 : {{ human.addr }}<br>
</div>
</template>
이렇게도 된다.
이름 : <span v-html="name + '<br>' + '같이 사용합니다'"></span>
스타일 주기.
data 뽑아오기.
<template>
<div>
<h1>연습중</h1>
이름 : {{ name }}<br> <!-- 머스타치 -->
이름 : <span v-text="name"></span> <br>
이름 : <span v-html="name + '<br>' + '같이 사용합니다'"></span>
나이 : {{ human.age }}<br>
사는 곳 : {{ human.addr }}<br>
<div v-bind:id="test">id="test"</div>
</div>
</template>
<script>
export default {
name: 'App',
components: {},
data(){
return{
//jsx
test : 'test1',
name : '김채원',
human : {name : '쟝원영', age : 38, addr: '한양'}
}
}
}
</script>
class도 된다.
줄이면 :class="test"
까지도 된다.
트리님 오늘은 자바스크립트에요!!!! 너무 재밌지여~~~?