[Vue.js] 문자열 데이터 바인딩 줄바꿈하기 (바인딩된 문자열에 html 태그 적용하기) 본문
[Vue.js] 문자열 데이터 바인딩 줄바꿈하기 (바인딩된 문자열에 html 태그 적용하기)
- 2020. 9. 20. 16:53
위와 같은 화면을 출력하려고 한다. 그런데 위의 텍스트가 <template>에 있는 것이 아닌
...(생략)
{ subTitle:
"환불/취소 요청 시 먼저, 다음의 내용으로 접수하여 주세요.
\n세부사항에 대한 확인이 필요합니다." }
이렇게 prop으로 상단 컴포넌트에서 넘어오는 데이터에 잡혀 있는 텍스트였다.
원래 코드는
<h3>{{ propsData.subTitle }}</h3>
이렇게 나타나던 것을 아래와 같이
{{ propsData.subTitle.replace("\n", "<br />") }}
replace 함수를 사용해서 JSON 데이터 개행 문자인 '\n'을 html 개행 태그인 '<br />'로 바꿔주었더니
응?
<br /> 태그가 그대로 잡히는 문제가 발생.
콧수혐 괄호 {{ }}는 바인딩되는 문자열을 문자열로만 인식하기 때문에 위와 같은 상황에선 적합하지 못하다. html 태그를 반영시키기 위해서는 콧수염 괄호 대신 v-html을 사용해야 한다.
먼저 v-html을 사용하기 전에 스크립트 단의 computed 영역에 다음과 같이 입력해주었다.
computed: {
subTitle() {
return this.propsData.subTitle.replace("\n", "<br />")
}
}
이제 computed에 선언되어서 데이터처럼 활용할 수 있는 subTitle을 아래와 같이 템플릿에 바인딩해주면,
<h3 v-html="subTitle"></h3>
위와 같이 원하던 모양대로 화면에 구현되었다.
혹시나 해서 다음과 같이 코드를 작성해보았더니 작동되지 않았다.
<h3 v-html="modalProps.subTitle.replace("\n", "<br />")"></h3> // 작동하지 않음
'개발 공부 일지 > Vue.js' 카테고리의 다른 글
[Vue.js] 숫자 자릿수 잘라서 보여주기(?) (0) | 2020.09.15 |
---|---|
[Vue.js] 순수 Vue로만 페이지네이션 구현하기 (0) | 2020.09.14 |
[Vue.js] img 태그 이미지 주소 데이터 바인딩 (0) | 2020.09.14 |