본문 바로가기
SPA

Svelte 글자 바꾸기2

by NOMADFISH 2021. 3. 24.

시작

  • 글자 변수를 바꾸어 화면에 표현하는 것을 해봤으니, 이제 내가 직접 타이핑한 글자가 화면에 표현되게 하는 방법에 대하여 알아 보자.
  • 여기서 우리는 바인딩이라는 개념에 대하여 대략 알 필요가 있다.
  • 바인딩?
    • 뭔가 서로 역여 있는게 바인딩이다.
    • 바인딩(Binding)에 대하여 찾아보면 1way, 2way 이런 것들이 나올 것이다. 용어자체는 중요하지 않다.
    • 일단 앞서 해본 것이 일종의 1way 바인딩이다. 코드 내부의 어떤 로직에 의해서 변경된 값 등이 화면상에 출력만 되게 만드는 것이다.
    • 2way 바인딩은 화면상에서 변경한 값이 직접 변수에 할당 되어 변경되고, 반대로 변수를 변경하면 그것이 바로 화면상에도 반영되게 하는 것이다.
      • 예를 들어 text input box에 어떤 값을 쓰면 코드상에 변수도 그 값이 반영되어 바뀌어 있고, 그 변수 값을 코드상에서 바꾸면 화면의 text input box의 값도 바뀌는 것이다.

코딩

<script lang="ts">
	export let name: string;
	export const onClickButton = () => {
		bindText = 'change';
	}
	export let bindText = 'fistvalue';
</script>

<main>
	<h1>Hello {name}!</h1>
	<p>Visit the <a href="https://svelte.dev/tutorial">Svelte tutorial</a> to learn how to build Svelte apps.</p>
	<p>{bindText}</p>
	<button on:click={onClickButton}>change</button>
	<input type="text" bind:value={bindText}>
</main>

<style>
	main {
		text-align: center;
		padding: 1em;
		max-width: 240px;
		margin: 0 auto;
	}

	h1 {
		color: #ff3e00;
		text-transform: uppercase;
		font-size: 4em;
		font-weight: 100;
	}

	@media (min-width: 640px) {
		main {
			max-width: none;
		}
	}
</style>
  • bind:value 라는 것을 사용하여 bindText라는 변수를 input의 value에다가 할당 시켰다.
  • change 버튼을 누르면 input 창의 값이 변한다.
  • input창에 직접 텍스트를 타이핑 하면, <p>{bindText}</p> 로된 부분의 텍스트도 동시에 변경된다.
  • 즉, 코드에서 bindText값을 바꾸면 즉시 input창에반영되고, 반대로 input창에 값을 바꾸어도, bindText변수에 그 값이 바로 반영된다.
  • 2 way binding이 되는 코드이다. 이제 아래 코드도 한번 실행 시켜 보자 다른 점은 bind:value 대신 value에 변수만 할당한다.
<script lang="ts">
	export let name: string;
	export const onClickButton = () => {
		bindText = 'change';
	}
	export let bindText = 'fistvalue';
</script>

<main>
	<h1>Hello {name}!</h1>
	<p>Visit the <a href="https://svelte.dev/tutorial">Svelte tutorial</a> to learn how to build Svelte apps.</p>
	<p>{bindText}</p>
	<button on:click={onClickButton}>change</button>
	<input type="text" value={bindText}>
</main>

<style>
	main {
		text-align: center;
		padding: 1em;
		max-width: 240px;
		margin: 0 auto;
	}

	h1 {
		color: #ff3e00;
		text-transform: uppercase;
		font-size: 4em;
		font-weight: 100;
	}

	@media (min-width: 640px) {
		main {
			max-width: none;
		}
	}
</style>
  • 이렇게 하면 change 버튼을 눌러 bindText값을 변경하면 input창에 값은 변경되고 화면상에도 표기 되지만, input창에서 타입핑해서 값을 바꾸면  <p>{bindText}</p>부분이 변하지 않는다. binText에 input창에서 변경된 값을 넣어주지 않는 1way binding이 된다.

'SPA' 카테고리의 다른 글

Svelte Material UI 적용하기  (0) 2022.05.30
Svelte Store  (0) 2021.10.31
Svelte로 글자를 바꾸자1  (0) 2021.02.22
Svelte(Typescript) 시작  (0) 2020.12.28
Svelte  (0) 2020.12.27