Web/Frontend

HTML Templating

WakaraNai 2021. 6. 11. 20:39
728x90
반응형

서버로부터 받은 데이터를 화면에 반영해야할 때,

HTML 형태는 그대로인데, 데이터만 변경되는 경우에 사용

ex) sns 또는 게시판에 댓글을 올린 경우

 

HTML Template

반복적인 HTML 부분을 template로 만들어두고,

서버에서 온 데이터(주로 JSON)를 결합해서, 화면에 추가하는 작업

 

 

.replace() 그리고 method chaining

replace()를 계속해서 연결하여 사용

var data = {  title : "hello",
              content : "lorem dkfief",
              price : 2000
           };
var html = "<li><h4>{title}</h4><p>{content}</p><div>{price}</div></li>";

var resultHTML = html.replace("{title}", data.title)
    .replace("{content}", data.content)
    .replace("{price}", data.price)

"<li><h4>hello</h4><p>lorem dkfief</p><div>2000</div></li>"

 

 

JSON 객체가 여러 개인 경우

최근의 하나만 적용된다.

그래서 이럴 때는 반복문이나 forEach를 사용하여 하나씩 적용해야 한다

var data =[
    {
        title : "hello",
        content : "lorem oka",
        price : 2000
    },
    {
        title : "bye",
        content : "lorem oka",
        price : 2000
    },
    {
        title : "goodnight",
        content : "lorem oka",
        price : 2000
    }
];
var html="<li><h4>{title}</h4><p>{content}</p><div>{price}</div></li>";
var resultHtml =[];
data.forEach(function(c) {
    var result = html.replace("{title}", c.title)
                     .replace("{content}", c.content)
                     .replace("{price}", c.price);
    resultHtml.push(result);
    
});

console.log(resultHtml);

 

 

 

 

 

HTML Template의 보관

js 안에 HTML같은 정적인 데이터를 보관하는 건 좋지 않음

그래서 한 가지 방법은,

- 간단한 코드는 HTML 코드 안에 숨겨둠(?)

- 데이터가 많다면 서버에 file로 보관하고 AJAX로 요청하여 받아옴

 

Templating

HTML의 script에 type을 명시하지 않으면, js로 인식X

text/template 타입으로 됨. 이건 렌더링 하지 않고 무시.

이 속성을 이용해 여기다가 몰래 js가 아닌 HTML 템플릿을 숨겨둠.

숨겨둔 HTML 템플릿은 js script에서 잘 인식됨

<script id="template-list-item" type="text/template">
  <li>
      <h4>{title}</h4><p>{content}</p><div>{price}</div>
  </li>
</script>

 

위의 코드 블럭 속 HTML을 js로 가져오는 방법은 다음과 같다

var html = document.querySelector("template-list-item");

 

 

css

 

받아온 데이터로 HTML을 replace 하기

 

 

{} 안에 적고 replace에서도 {}를 적어주어야 한다

${}는 자동적으로 치환되어 이에 인식되지 않는다

728x90
반응형

'Web > Frontend' 카테고리의 다른 글

[JS] 객체리터럴, this, bind()  (0) 2021.07.01
[JS] 배열 메소드  (0) 2021.07.01
Tab UI Component  (0) 2021.06.11
[CSS] float  (0) 2021.05.27
Event Delegtion - 등록, 버블링, 멈추기  (0) 2021.05.25