Vue - Methods & v-html Directive

2023. 7. 27. 14:57·📘 Frontend/Vue

Vue의 Methods 이해하기

저번에 배운 v-bind나 보간법을 이용해 {{ }} 사이에 데이터 바인딩을 했었습니다.

이때 {{ }} 사이에 데이터가 어떤 조건에 의해 무작위로 바뀌게 출력하도록 해보겠습니다.

이럴때 사용할 수 있는 Vue의 옵션중 하나가 Methods 입니다.

Methods를 사용하면 사용자 이벤트가 발생하는 등의 일이 생겼을때 실행할 함수를 지정합니다.

methods의 값으로는 Javascript 객체를 전달합니다.

이때, 기존의 data는 그 자체로 함수이자 메서드라면 methods는 메서드 및 함수로 만들어진 객체를 찾습니다.

const app = Vue.createApp({
  data: function() {
    return {
      courseGoal: 'Finish the course and learn Vue!',
      vueLink: 'https://vuejs.org/'
    };
  },

  // 이 Methods의 값인 객체의 프로퍼티는 함수여야 합니다.
  methods: {
    outputGoal() {
      const randomNumber = Math.ramdom();

      if (randomNumber < 0.5) {
        return 'Learn Vue!';
      } else {
        return 'Master Vue!';
      }
    }
  }
});

app.mount('#user-goal');

이렇게 자바스크립트 코드를 짠 후 적용할 HTML 태그에 Interpolation 구문을 사용하여 지정해줍니다.

<p>{{ outputGoal() }}</p>

이제 페이지를 새로고침 할때마다 Learn Vue!, Master Vue! 라는 글자가 무작위로 나올것입니다.


v-html을 사용하여 원시 HTML 출력하기

const app = Vue.createApp({
  data: function() {
    return {
      courseGoalA: 'Finish the course and learn Vue!',
      courseGoalB: '<h2>Master Vue and build amazing Apps!</h2>',
      vueLink: 'https://vuejs.org/'
    };
  }
 ...

만약 위 코드의 courseGoalB의 문자열로 HTML의 태그가 들어왔을때 {{}}를 통해 출력을 해보면,

HTML 태그가 그대로 문자열로 출력되는걸 볼 수 있습니다.

이유는 크로스 사이트 스크립팅 공격으로부터 보호해주기 때문입니다.

하지만, HTML을 HTML같은 일반 텍스트가 아니라 실제 HTML을 적용하고 싶을때는 어떻게 할까요?

이 경우 사용할 수 있는 디렉티브가 바로 v-html입니다.

<p v-html="outputGoal()"></p>

위 코드처럼 HTML의 태그 내에 v-html 디렉티브를 사용하면 해당 컨텐츠는 HTML로 인식해야 한다고 지정합니다.

만약 v-html을 Default로 설정하면 {{}}에 내장된 크로스 사이트 스크립팅 공격에 대해 보안 위협이 발생하기 때문에,

진짜 필요할때만 사용하는걸 추천드립니다.

사용할 일이 많지는 않지만 언젠간 쓸일이 있어 학습해보았습니다.

저작자표시 (새창열림)

'📘 Frontend > Vue' 카테고리의 다른 글

Vue - Event Modifier  (0) 2023.07.27
Vue - Native Event Object  (0) 2023.07.27
Vue - Event Binding 이해하기  (0) 2023.07.27
Vue - Interpolation & V-Bind  (0) 2023.07.27
Vue - Basic  (2) 2023.07.26
'📘 Frontend/Vue' 카테고리의 다른 글
  • Vue - Native Event Object
  • Vue - Event Binding 이해하기
  • Vue - Interpolation & V-Bind
  • Vue - Basic
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      Lock #Thread #Concurrency
      GStreamer #Pipeline
      React #Markdown
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Vue - Methods & v-html Directive
    상단으로

    티스토리툴바