<template>
  <div>
    <div class="flex">
      <div v-for="item in menus">{{ item }}</div>
    </div>
    <!-- index 사용하려면 괄호로 -->
    <ul>
      <li v-for="(item, index) in products">
        <h4 :style="red">{{ index }} 번</h4>
        <!-- <div @click="modal = true">{{ item.title }}</div> -->
        <div @click="onPopup(item)">{{ item.title }}</div>
        
        <img :src="item.image" alt=""/>
        <button @click="item.count++"> ❤️ {{ item.count }}</button>
      </li>
    </ul>

    <ul>
      <li v-for="(item, index) in products2">
        <h4 :style="red">{{ index }} 번</h4>
        <div @click="onPopup(item)">{{ item.title }}</div>
        <img src="../src\assets\itemImg\img_01.png" alt=""/>
        <button @click="item.count++"> ❤️ {{ item.count }}</button>
      </li>
    </ul>
  </div>

  <div class="modal-bg" v-if="modal" @click="modal = false">
    <div class="modal">
      <p class="title">팝업창입니다 </p>
      <p class="content">팝업의내용입니다</p>
    </div>
  </div>
</template>

 

Vue의 if문

v-if

v-else

v-else-if

 

Vue의 for문

v-for

 

Vue html에서 속성 값 불러오기(속성 앞에 :을 붙여줌)

 

기존

style="display: blodk; color: red;"

Vue

:style="display: block; color: red;" 

 

이미지도 같음

img src="/assets/img/~~"

 

:img src="/assets/img/~~"

속성 값이 동적이라면

:img src="item.image"

 

<script>
import testData from './assets/data/data';


export default {
  name: 'App',
  data(){
    // state 값
    return {
      modal: false,
      products: testData,
      menus: ['HOME', 'ABOUT', 'CART'],
      red: 'color: red',
      count: 0,
    }
  },
  // 함수 만드는 곳
  methods: {
    onPopup(){
      this.modal = true;
    },
  },
  components: {
    // HelloWorld
  }
}
</script>

 

import한 date.js

var data = [
    {
        id: 0,
        title: '역삼',
        image: require("@/assets/itemImg/img_01.png"),
        content: '',
        count: 0,
        price: 3000
    },
    {
        id: 1,
        title: '마포',
        image: require("@/assets/itemImg/img_02.png"),
        content: '',
        count: 0,
        price: 4000
    },
    {
        id: 2,
        title: '망원',
        image: require("@/assets/itemImg/img_03.png"),
        content: '',
        count: 0,
        price: 5000
    },
]

export default data;

이미지 값 절대경로 설정

- 경로를 require로 감싸준다

- assets 앞에 @를 붙여준다(html에서도 같음 =>  img src="@~~~"

 

* 파일명만 가지고 있을 때 html에서 적용할 경우

img src="require('@/assets/itemImg/${image}')

 

 

var data =

대신 export default 를 앞에 적어줘도 됨(데이터가 하나일경우)

여러개일경우

 

ex)

export {data1, data2} 

로 입력해서 전달

 

nvm은 node 버전관리 도구이다

프로젝트를 하다보면 여러가지 버전이 다른 프로젝트를 진행하게 되는데 그럴 때 아주 유용하다

 

몇 줄 되지 않는 코드나 css에서 폰트만 수정할건데 버전을 지웠다 다시 다운받았다. .

너무 번거롭기 때문에 버전 관리 도구를 사용해준다!

 

아래 주소에서 다운받아줌

https://github.com/coreybutler/nvm-windows/releases

 

Releases · coreybutler/nvm-windows

A node.js version management utility for Windows. Ironically written in Go. - coreybutler/nvm-windows

github.com

 

해당 페이지로 이동해서 밑으로 내리다보면 다운로드 가능한 파일들이 보임

나는 exe 파일 설치ㅎ

 

기존 최신 노드를 설치해놓고 nvm 을 다운받으려고 하니 해당 버전을 nvm으로 관리하겠냐는 문구가 뜬다

 

설치는 완료 했고

nvm list available로 설치 가능한 node 목록을 확인해본다 ㅎ

 

 

그동안 자주 썼던 건

nvm ls 

버전 변경전에 어떤 버전을 쓰고 있는지, 어떤 버전을 사용할지 확인할 때, 프로젝트 이동할 때 많이 사용했다

버전 앞에 * 붙어 있는게 현재 사용 버전인 것이다

 

예를 들어 node 12 버전도 설치되어 있으면

 

* 18.16.1

 12.0.1(뒤에 숫자는 임의임)

 

이런식으로 되어 있는데 12 버전을 사용하고 싶을 때

nvm use 12.0.1

을 입력해주면 12버전으로 변경되어 해당 버전을 사용할 수 있다

 

'개발 > 그 외' 카테고리의 다른 글

[AWS] MFA 설정(다중인증, OTP)  (0) 2024.01.11
인텔리제이(IntelliJ IDEA) 설치하기  (0) 2023.03.21

https://v2.ko.vuejs.org/v2/guide/installation.html

 

설치방법 — Vue.js

Vue.js - 프로그레시브 자바스크립트 프레임워크

v2.ko.vuejs.org

 

 

npm install vue

node는 이미 깔려있어서

냅다 뷰를 깔긴 했는데..

 

 

막상 뷰 버전을 확인하려고 하니까 안돼서.. cli을 설치했따

cli -> command line interface의 약자로 터미널에 명령어를 입력할 수 있게 해줌

 

예를 들어 뷰 버전을 확인하고 싶을 때 

vue -v 이런식으로

 

cli 설치!

 

 

원하는 경로로 설정 후 프로젝트를 생성해준다

 

냅다 받았기때문에 제일 최신 버전일것.. Vue 3을 선택해줌

 

설치가 다 되면 이런 화면이 뜬다

 

npm run serve로 뷰 실행!

혹시 포트번호를 변경하고 싶으면 프로젝트를 열고 package.json 파일에서 설정해주면 된다

(만든 프로젝트 파일을 열고 package.json 파일 내 script -> serve 를 보면 옵션을 설정할 수 있음, 포트 번호를 변경해줌)

 

난 4200 포트로 설정ㅎ

 

짠 방금 뷰로 만든 프로젝트를 실행했다!

https://www.jetbrains.com/idea/download/#section=windows

 

Download IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrains

Download the latest version of IntelliJ IDEA for Windows, macOS or Linux.

www.jetbrains.com

 

노트북에도 개발환경 세팅 겸 포스팅

시간이 되면 공부하는 내용까지 천천히 적어 볼 예정이다

 

구매는 안해서 무료 버전으로 받았지만 학생 계정이 있으면 무료로 사용할 수 있다

방금 생각난김에 학생 계정 신청도 하고 암튼

 

 

첫번째꺼 빼고 체크 했는데

- 바탕화면 바로가기

- 환경변수에 자동으로 추가(따로 환경변수에 입력하지않아도 됨 / exe파일과 같음)

- 프로젝트로 폴더 열기

- 자바 프로젝트 할거니까 자바 체크

 

 

install 클릭

 

 

재시작 / 나중에 재시작

 

 

동의 체크하고 continue

 

 

데이터 공유 보냄 / 안보냄 원하는 거 체크

 

 

프로그램 실행 첫 화면

 

 

다음은 프로젝트를 만들고 실행까지 

'개발 > 그 외' 카테고리의 다른 글

[AWS] MFA 설정(다중인증, OTP)  (0) 2024.01.11
윈도우 nvm 설치  (0) 2023.07.14

앵귤러에서 애니메이션을 사용하고 싶으면 모듈에 

BrowserModule

BrowserAnimationsModule

추가

 

모듈파일

// main.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

@NgModule({
  declarations: [
    MainComponent,
  ],
  exports: [
    MainComponent,
  ],
  imports: [
    CommonModule,
    BrowserModule,
    BrowserAnimationsModule
  ]
})
export class MainModule{}

 

ts 파일

// ts 파일
import { Component } from '@angular/core';
import {
  trigger,
  state,
  style,
  animate,
  transition
} from '@angular/animations';

@Component({
  selector: 'app-main',
  templateUrl: './main.component.html',
  styleUrls: ['./main.component.css'],
  // 애니메이션 정의
  animations:[
    // 애니메이션 작성
    trigger('openClose', [
         // *
        state('open', style({
          height: '100px',
          opacity: 1,
          background: 'green'
        })),
        state('closed', style({
          height: '100px',
          // height: 속성을 주지 않을 경우 당연하지만 height가 내용에 맞게 줄어듬
          opacity: 0.5,
          background: 'orange',
        })),
        // **
        transition('open => closed', [
          animate('1s')
        ]),
        transition('closed => open', [
          animate('0.5s')
        ])
      ]
    )
  ]
})

export class MainComponent{
  isOpen = true;
  toggle(){
    this.isOpen = !this.isOpen;
  }
}

*

state() 함수는 트랜지션이 완료된 시점의 스타일을 지정

애니메이션이 종료되면 스타일은 그대로 적용됨(애니메이션이 비활성화되면 state 함수에 지정한 스타일이 남아있음)

 

 

**

transition() 함수는 애니메이션이 진행되는 동안의 스타일을 지정

해당 코드에서 => 연산자는 단방향 트랜지션을 의미

<=> 는 양방향 트랜지션을 의미함

예를 들어 open에서 closed로, closed에서 open으로 가는 시간이 같다면

transition('open <=> closed', [

  animate('1s')

]),

animate는 트랜지션이 진행되는 시간임

상태 전환을 여러번 표현할 수 있음, 또한 정의된 순서로 매칭되기 때문에 

예를 들어 * => *의 트랜지션은 다른 트랜지션보다 제일 나중에 정의 되어야 함(참고 젤 하단)

@Component({
  selector: 'app-main',
  templateUrl: './main.component.html',
  styleUrls: ['./main.component.css'],
  animations:[
    trigger('openClose', [
        state('open', style({
          height: '100px',
          opacity: 1,
          background: 'green'
        })),
        state('closed', style({
          height: '100px',
          opacity: 0.5,
          background: 'orange',
        })),
        // 이런식으로 가능함
        transition('open => closed, closed => end', [
          animate('1s')
        ]),
      ]
    )
  ]
})

 

 

html 파일

<button type="button" (click)="toggle()">애니메이션 버튼</button>
<!-- 클릭했을 때 값 변경 -->

<div [@openClose]="isOpen ? 'open' : 'closed'">
<!-- * -->
  <p>애니메이션 {{ isOpen ? 'open' : 'closed' }}</p>
</div>

*

@심볼을 붙여 컴포넌트 템플릿과 트리거 이름을 연결함

[@트리거이름]="애니메이션 상태를 선택하는 평가식"

애니메이션 트리거는 *ngIf로도 시작할 수 있음

 

 

 

 

애니메이션 비활성화

<div [@.disabled]="false">
  <button type="button" (click)="toggle()">애니메이션 버튼</button>
  <div [@openClose]="isOpen ? 'open' : 'closed'">
    <p>애니메이션 {{ isOpen ? 'open' : 'closed' }}</p>
  </div>
</div>

애니메이션이 활성화 된 상단 element에 @.disabled 값을 바인딩하면

자식 element까지 애니메이션이 비활성화 됨

 

 

참고

https://angular.kr/guide/animations#%EB%8D%94-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0

 

Angular 가이드

Angular 가이드

angular.kr

 

https://angular.kr/guide/transition-and-triggers#%EB%AF%B8%EB%A6%AC-%EC%A0%95%EC%9D%98%EB%90%9C-%EC%83%81%ED%83%9C%EC%99%80-%EC%99%80%EC%9D%BC%EB%93%9C%EC%B9%B4%EB%93%9C-%EB%A7%A4%EC%B9%AD

 

Angular 가이드

Angular 가이드

angular.kr

 

+ Recent posts