Vue: HTML ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์— ๋งŒ๋“  2016๋…„ 02์›” 06์ผ  ยท  48์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: vuejs/vue

๋ฌธ์ œ

์šฐ๋ฆฌ ๋ชจ๋‘ ์•Œ๋‹ค์‹œํ”ผ HTML์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. myProp="123" ๋Š” myprop="123" ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„๋˜๋ฉฐ ์ด๋กœ ์ธํ•ด Vue.js์—์„œ my-prop="123" ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JavaScript์—์„œ myProp ๋กœ ์„ ์–ธ๋œ prop์„ ์ฐธ์กฐํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ๊ตฌ์„ฑ ์š”์†Œ์— ๋™์ผํ•œ ๋งคํ•‘์„ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ •์˜ํ•  ๋•Œ:

import MyComponent from './my-component'

export default {
  components: {
    MyComponent // es2015 shorhand
  }
}

ํ…œํ”Œ๋ฆฟ์—์„œ <MyComponent> ๋Œ€์‹  <my-component> ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์„ฑ๊ฐ€์‹  ๋ถ€๋ถ„์€ Vue.js๊ฐ€ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์ „ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— Vue.js๊ฐ€ ์ปดํŒŒ์ผํ•  ๋•Œ ์ผ€์ด์Šค ์ •๋ณด๊ฐ€ ์ด๋ฏธ ์†์‹ค๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„์ด๋””์–ด

๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ๋งค์นญ ๋กœ์ง์„ ์กฐ์ •ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

<MyComponent :myProp="msg"></MyComponent>

์™œ์š”?

์šฐ๋ฆฌ ์ฝ”๋“œ์—์„œ camelCase ๋Œ€ kebab-case ๋ถˆ์ผ์น˜๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ์†Œํ’ˆ์— PascalCase/camelCase๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์‹ค์šฉ์ ์ธ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Props๋Š” ํ…œํ”Œ๋ฆฟ๊ณผ JavaScript์—์„œ ์†์„ฑ์œผ๋กœ ์ฐธ์กฐ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ดํ”ˆ์ด ์žˆ์œผ๋ฉด ๋งค์šฐ ์–ด์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ( myProp ๋Œ€ this['my-prop'] )
  2. ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ๋ณ€์ˆ˜ ์ด๋ฆ„์€ ์ผ€๋ฐฅ ๋Œ€์†Œ๋ฌธ์ž๊ฐ€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด import MyComp from './my-comp' ๋ฅผ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ my-comp ๋Š” ๋‹จ์ˆœํžˆ ์œ ํšจํ•œ ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ES2015 ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ์†๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด components: { MyComp } ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  3. ๋Œ€๋ฌธ์ž๋กœ ๋œ ๊ตฌ์„ฑ ์š”์†Œ ์ด๋ฆ„์€ ์ผ๋ฐ˜ ์š”์†Œ๋ณด๋‹ค ๋” ๋ˆˆ์— ๋„๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ํƒœ๊ทธ๊ฐ€ ์‚ฌ์šฉ์ž ์ง€์ • ๊ตฌ์„ฑ ์š”์†Œ์ด๊ณ  ์–ด๋–ค ํƒœ๊ทธ๊ฐ€ ๊ทธ๋ ‡์ง€ ์•Š์€์ง€ ๋” ๋ช…ํ™•ํ•ด์ง‘๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์  ์„ธ๋ถ€ ์‚ฌํ•ญ

๊ธฐ๋ณธ ๊ตฌํ˜„์€ ์†Œํ’ˆ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ ์˜ต์…˜์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์†Œ๋ฌธ์ž๋กœ ์ •๊ทœํ™”ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ๋‚ด๋ถ€ ์ผ์น˜ ํ”„๋กœ์„ธ์Šค ์ค‘์— ๋‹จ์ˆœํžˆ mycomponent ๋ฐ myprop ๊ฐ€ ๋˜์ง€๋งŒ ์•ฑ ์ฝ”๋“œ์—์„œ ์›ํ•˜๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์‚ฌ์‹ค ์‚ฌ์šฉ์ž๋Š” ์ด๋Ÿฌํ•œ ๋‚ด๋ถ€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์•Œ ํ•„์š”์กฐ์ฐจ ์—†์Šต๋‹ˆ๋‹ค.)

์ž ์žฌ์ ์ธ ์šฐ๋ ค ์‚ฌํ•ญ:

  1. ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ. ์†Œ๋ฌธ์ž ๋ณ€ํ™˜์€ ํ˜„์žฌ ์ผ€๋ฐฅ ๋Œ€์†Œ๋ฌธ์ž ๋ณ€ํ™˜๊ณผ ํ•จ๊ป˜ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‘ ๊ตฌ๋ฌธ์ด ๊ณต์กดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์•„๋ฌด ๊ฒƒ๋„ ์ค‘๋‹จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. myProp ๋ฐ MyProp ๋Š” ํ…œํ”Œ๋ฆฟ์—์„œ ๋™์ผํ•œ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋™์ผํ•œ ๊ตฌ์„ฑ ์š”์†Œ์— ๋‘ ๊ฐœ์˜ props ๋˜๋Š” ๋‘ ๊ฐœ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋Œ€์†Œ๋ฌธ์ž๋กœ๋งŒ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ์„ ์‰ฝ๊ฒŒ ๊ฐ์ง€ํ•˜๊ณ  ๊ฒฝ๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋งž์ถค ์ด๋ฒคํŠธ์—๋„ ๋™์ผํ•œ ๊ทœ์น™์„ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด:

html <MyComponent @myEvent="handleIt"></MyComponent>

์ด๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฒคํŠธ ์ด๋ฆ„์ด ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ด๋ฒคํŠธ ์‹œ์Šคํ…œ ์‚ฌ์šฉ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— props ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ ์ด๋ฆ„๋ณด๋‹ค ๋” ํฐ ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ด๋ฒคํŠธ ์ด๋ฆ„์„ ์†Œ๋ฌธ์ž๋กœ ์ •๊ทœํ™”ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๊นŒ? ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ๋‘ ๊ฐœ์˜ ์ด๋ฒคํŠธ๊ฐ€ ๋Œ€์†Œ๋ฌธ์ž๋กœ๋งŒ ๊ตฌ๋ถ„๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ์ง€๋งŒ(์˜ˆ: ๋™์ผํ•œ ์•ฑ์—์„œ myEvent ๋ฐ myevent ๋ชจ๋‘ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ) ์ด์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

discussion

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋ฉ”๋ชจ๋ฆฌ์— ์ปค๋ฐ‹ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๊ทœ์น™: HTML = kebab-case, JavaScript = camelCase

HTML์€ ์†์„ฑ๊ณผ ํƒœ๊ทธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. v-bind ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์†์„ฑ ๊ฐ’์€ JavaScript ํ‘œํ˜„์‹์ด๋ฏ€๋กœ ๋‘ ๋ฒˆ์งธ ๋ฌธ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  48 ๋Œ“๊ธ€

<MyComponent :myProp="msg"></MyComponent>

+
๋‚˜๋Š” ์ข…์ข… ์ปดํฌ๋„ŒํŠธ์™€ ํƒœ๊ทธ์˜ ์ฐจ์ด์ ์„ ๋ณด๊ธฐ ์œ„ํ•ด ๊ทธ๋ ‡๊ฒŒ ์“ฐ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

+1

๋ชจ๋“  ์ด๋ฒคํŠธ ์ด๋ฆ„์„ ์†Œ๋ฌธ์ž๋กœ ์ •๊ทœํ™”ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๊นŒ?

๋„ค! ์ฝ”๋“œ๋ฅผ ๋” ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํ•ญ์ƒ ์ด๋ฒคํŠธ ์ด๋ฆ„์„ ์†Œ๋ฌธ์ž๋กœ ์œ ์ง€ํ•˜๊ณ  ์นด๋ฉœ์ผ€์ด์Šค ๋Œ€์‹  ๋Œ€์‹œ๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. Camelcase ์ด๋ฒคํŠธ ์ด๋ฆ„์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Vuejs๊ฐ€ Angular์™€ ๊ฐ™์€ ์œ ์‚ฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹ ์„ ์ถ”๊ตฌํ•˜๋Š” HTML ์‚ฌ์–‘์—์„œ ๋ฉ€์–ด์งˆ ๊ฒƒ์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ž ์žฌ์ ์ธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ƒ๊ฐ:

  1. ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด ์กด์žฌํ•˜๋Š” ํ•œ ๊ถ๊ทน์ ์œผ๋กœ ์–ด๋–ค ๊ฒƒ์ด ๊ฒฐ์ •๋˜๋“  ์ƒ๊ด€์—†์ง€๋งŒ ์•„๋งˆ๋„ ์ผ€๋ฐฅ ์ผ€์ด์Šค ๋ฐฉ๋ฒ•์„ ๊ณ„์† ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  2. camel-case์™€ lower camel-case์˜ ๊ตฌ๋ถ„์ด ๋ถ€์กฑํ•˜์—ฌ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ var CamelCase ๋Š” ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ณ  var camelCase ๋Š” ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ๋ณ€์ˆ˜ var camelCase = new CamelCase(); ๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ด๋ฆ„์„ ๋”ฐ์„œ ๋ช…๋ช…๋œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  3. ๋‚˜๋Š” ์ผ€์ด์Šค์— ์˜ํ•ด์„œ๋งŒ ๊ตฌ๋ณ„๋˜๋Š” ๋‘ ๊ฐœ์˜ ๋…ํŠนํ•œ ์ด๋ฒคํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋งค์šฐ ํ˜•ํŽธ์—†๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ํฐ ์šฐ๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ฝ”๋”ฉํ•˜๋Š” ๋ฐฉ์‹์— ์ด์ƒํ•œ ๋ถˆ์ผ์น˜๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด :myprop="" :myProp="" :mYpRoP="" :my-prop="" ๋Š” ๋ชจ๋‘ ์œ ํšจํ•˜๊ณ  ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘Ž ๋งˆํฌ์—…์— ์ผ€๋ฐฅ ์ผ€์ด์Šค๋ฅผ, ์ฝ”๋“œ์— ์นด๋ฉœ ์ผ€์ด์Šค๋ฅผ ์œ ์ง€ํ•˜์„ธ์š”. ์ด๊ฒƒ์€ HTML ์‚ฌ์–‘์˜ ์ผ๋ถ€์ด๋ฉฐ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์˜จ ์‚ฌ๋žŒ๋“ค์ด๋‚˜ ์ด๋ฏธ ํ‘œ์ค€์„ ๋ฐฐ์šด ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋” ํฐ ํ•™์Šต ๊ณก์„ ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@Teevio ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ผ๊ด€์„ฑ์ด ์†์‹ค๋ฉ๋‹ˆ๋‹ค.

HTML์€ kebab-case๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ECMAScript๊ฐ€ camelCase ์–ธ์–ด๋ผ๋Š” ํ—ˆ์šฉ๋œ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค. _hiding_ ๋Œ€์‹  ๋ถ„๋ฆฌ๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋ฐ˜์‘์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ์„ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ๋ฐ˜์‘์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์ผ๊ด€์„ฑ์„ ์ ์šฉํ•˜๋Š” data-* ๋ฐ aria-*๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค).

_beginner_์— camelCase <-> kebab-case๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์ด์œ (MDN ๋งํฌ๋ฅผ ํ†ตํ•ด ๋˜๋Š” ์—ฌ๊ธฐ๊นŒ์ง€)๋Š” ์ดˆ๋ณด์ž์˜ HTML ์ดํ•ด์— ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Evan์˜ ๋ง์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋…์„ฑ๊ณผ ์ฝ”๋“œ ์ผ๊ด€์„ฑ์ด ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค!
+1

๋‚˜์—๊ฒŒ HTML ๋‚ด๋ถ€์— camelCase๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ •๋ง ์ด์ƒํ•˜๊ฒŒ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

HTML์€ HTML, JS๋Š” JS

ํ˜„์žฌ ๋ฒ„์ „์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค

6๊ฐœ์›” ๋™์•ˆ Vue๋ฅผ ์‚ฌ์šฉํ•ด ์™”์ง€๋งŒ ์—ฌ์ „ํžˆ ๋งค๋ฒˆ ์ €๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค :( Vue์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ๋„ˆ๋ฌด ์ข‹๊ธฐ ๋•Œ๋ฌธ์— ํฐ ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ์ œ๊ฐ€ ํ•œ ์ผ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ ์•„์ด๋””์–ด๋ฅผ ์™„์ „ํžˆ ์ดํ•ดํ•˜๊ณ  ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค +1

+1 ์ด์ „ ๋ฒ„์ „๊ณผ๋„ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

+1
๋‚˜๋Š” ๋™์˜ํ–ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์ด๋ฒคํŠธ ์ด๋ฆ„์„ ์†Œ๋ฌธ์ž๋กœ ์ •๊ทœํ™”ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๊นŒ?

@azamat-sharapov์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

@Teevio Vue ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋Œ€๋žต ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. var MyComp = Vue.extend({ .. }) ํ•˜๋ฉด var myComp = new MyComp() ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์œ ํšจํ•œ ๊ตฌ๋ฌธ ๋ฌธ์ œ์— ๊ด€ํ•ด์„œ๋Š” ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. :my-prop , :MY-PROP ๋ฐ :mY-pRop ๋ชจ๋‘ ํ˜„์žฌ์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. HTML์€ ๋‹จ์ˆœํžˆ ๋ชจ๋“  ์ผ€์ด์Šค ์ •๋ณด๋ฅผ ๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ ๊ธฐ๋Šฅ๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์Šคํƒ€์ผ ์ธ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์Šคํƒ€์ผ์„ ์„ ํƒํ•˜๊ณ  ๊ณ ์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

@jamesxv7 @moe-szyslak @jonagoldman ๋ฐ HTML ํ‘œ์ค€์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์šฐ๋ คํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค: HTML์—์„œ camelCase ํƒœ๊ทธ/์†์„ฑ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์™„์ „ํžˆ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ํƒœ๊ทธ/์†์„ฑ ์ด๋ฆ„ ์ผ์น˜๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. . ์‚ฌ์–‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

HTML ๊ตฌ๋ฌธ์˜ ๋ฌธ์„œ์—์„œ:

HTML ์š”์†Œ์˜ ํƒœ๊ทธ ์ด๋ฆ„์€ ์ด ๋ฌธ์„œ์˜ HTML ์š”์†Œ ์„น์…˜์— ์ œ๊ณต๋œ ์š”์†Œ ์ด๋ฆ„๊ณผ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ํ˜ผํ•ฉํ•˜์—ฌ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํƒœ๊ทธ ์ด๋ฆ„์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
HTML ์š”์†Œ์˜ ์†์„ฑ ์ด๋ฆ„์€ ์ด ๋ฌธ์„œ์˜ HTML ์š”์†Œ ์„น์…˜์— ์ œ๊ณต๋œ ์†์„ฑ ์ด๋ฆ„๊ณผ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ํ˜ผํ•ฉํ•˜์—ฌ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์†์„ฑ ์ด๋ฆ„์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ PascalCase/camelCase๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ์ผ๊ด€์„ฑ/๊ฐ€๋…์„ฑ์ด ํ–ฅ์ƒ๋˜๋ฉด ์™„์ „ํžˆ ์‚ฌ์–‘์„ ์ค€์ˆ˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ํ•ด๋‹น๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์ผ€๋ฐฅ ์ผ€์ด์Šค๋ฅผ ์„ ํ˜ธํ•œ๋‹ค๋ฉด ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํŠนํžˆ re @jamesxv7 : ์ด๊ฒƒ์€ Angular 2๊ฐ€ ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. Angular 2๋Š” ๋งž์ถคํ˜• HTML ํŒŒ์„œ๋ฅผ ๋„์ž…ํ•˜์—ฌ ํ…œํ”Œ๋ฆฟ์„ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋„๋ก ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ Vue๋Š” ์‹ค์ œ๋กœ JS ๋Œ€์‘ ํ•ญ๋ชฉ์„ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ์‚ฌ์–‘์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ผ€๋ฐฅ์„ html๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ผ๊ด€์„ฑ์ด๋ผ๋Š” ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•˜์ง€๋งŒ ์‚ฌ์–‘ ์ค€์ˆ˜๋ผ๋Š” ์•„์ด๋””์–ด๋ฅผ ๋” ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

camelCase ํƒœ๊ทธ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.. HTML์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋Œ€์‹ ์—. Vue๋Š” JavaScript์—์„œ camelCase ID๋กœ ์ •์˜๋œ ๊ตฌ์„ฑ ์š”์†Œ์™€ ์ž๋™์œผ๋กœ ์ผ์น˜์‹œํ‚ต๋‹ˆ๋‹ค.

์ด ๊ฒฝ๊ณ ๋Š” ๊ตฌ์„ฑ ์š”์†Œ ๋“ฑ๋ก์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ด๋ฏธ ๋งค์šฐ ๊ฐ„๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธด ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ผ€๋ฐฅ์„ ๊ณ„์† ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ด ์žˆ๋Š” ํ•œ HTML์—์„œ camelCase๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์€ ํ›Œ๋ฅญํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@yyx990803 ๋„ค , ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์ฃผ์žฅ์„ ์ƒ๊ฐํ•ด ๋ณด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์ง€๋งŒ ์†”์งํžˆ ๋‚˜๋Š” ๊ณ ์ง‘ํ•  ๋งŒํ•œ ์ฃผ์žฅ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, ์šฐ๋ฆฌ๋Š” ๊ฒฐ๊ตญ ์Šคํƒ€์ผ ์„ ํƒ์— ๋Œ€ํ•ด ๋…ผ์Ÿํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ด ์žˆ๋Š” ๋™์•ˆ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๊ณ ์ˆ˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ(๊ทธ๋Ÿฌ๋‚˜ ๊ฐ•์ œ๋Š” ์•„๋‹ˆ์ง€๋งŒ) ์–ธ๊ธ‰๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

kebab-case๊ฐ€ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜๊ณ  camelCase/PascalCase๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด BC๋ฅผ ์†์ƒ์‹œํ‚ค์ง€ ์•Š๋Š” ์˜ต์…˜์ด๋ผ๋ฉด ์‚ฌ์šฉํ•  ๋•Œ ์ถ”๊ฐ€์— ๋ฐ˜๋Œ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋‹ค๋ฅธ ์ผ์„ ํ•˜๋„๋ก ๊ฐ•์š”ํ•˜๋Š” ๊ฒƒ์€ ๋ณ€ํ™”๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์˜ต์…˜์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ•˜๊ฑฐ๋‚˜ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๊ฒƒ์€ ์ด ์˜ต์…˜์ด ์ž˜ ๋ฌธ์„œํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ญ์ƒ Evan์ฒ˜๋Ÿผ ์ž˜ํ–ˆ์Šต๋‹ˆ๋‹ค!

์Šค์ฝง

๊ฒฝ๊ณ  ๋˜๋Š” ๋ฌด์‹œ์™€ ๊ฐ™์€ ์˜ต์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. myComponent
html์—์„œ mycompOnent ๋กœ ์–ธ๊ธ‰ํ•˜๊ณ  ๊ฐœ์ธ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ๊ณ ๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.
we found something that would match "myComponent": "mycompOnent" (line 152), use "my-component" instead
๋ฌผ๋ก  ์†Œํ’ˆ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€.
์ฒซ ๋ฒˆ์งธ ์‹œ๋„์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚˜์ค‘์— ๊ฐ€๋…์„ฑ์ด ๋” ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ kebab-case/camelCase ๋ฌธ์ œ๋ฅผ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ง„์งœ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค ;)

๊ธฐ๋ณธ๊ฐ’์€ ๊ฒฝ๊ณ ๊ฐ€ ์—†๊ณ  ์ž‘๋™๋งŒ ํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ๋‚˜์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ๊ฒฝ๊ณ ๋Š” ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

atone vs a-tone vs at-one ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๋“ค์ด ์•„์ฃผ ๋“œ๋ฌธ ๊ฒฝ์šฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@simplesmiler ์ผ€๋ฐฅ ์ผ€์ด์Šค ์†Œํ’ˆ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ด์ „ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์›น ํ‘œ์ค€์— ๋Œ€ํ•œ ํˆฌ๋ช…์„ฑ์„ ์ด‰์ง„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ์š”์†Œ ์‚ฌ์–‘ ์—๋Š” ์ด๋ฆ„์— ํ•˜์ดํ”ˆ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. <my-component/>

@simplesmiler ๊ฐ€ ๋งํ•œ ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ: addOne ๋ฐ adDone ๋Š” ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด๋ฒคํŠธ ๊ตฌํ˜„์— ํŠนํžˆ ๋ถˆ์พŒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  html์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ๋„์ž…ํ•˜์ง€ ๋ง™์‹œ๋‹ค. ์ด ๊ตฌํ˜„์€ html์—์„œ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ๋งŒ์„ ์ด‰์ง„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ์ด๋Š” ๋‚˜์œ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ํŒŒ์ผ ์ด๋ฆ„์— ํ•˜์ดํ”ˆ ๊ตฌ๋ถ„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์—์„œ๋„ ๊ทธ๊ฒƒ๋“ค์„ ์ œ๊ฑฐํ•˜๊ณ  ์ผ€์ด์‹ฑ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋งˆ์ง€๋ง‰์œผ๋กœ ํ•˜์ดํ”ˆ๊ณผ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์‹œ์Šคํ…œ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ํŒ€์˜ ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์ฝ”๋”ฉ ์Šคํƒ€์ผ์„ ์ด‰์ง„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” @paulpflug ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜์—ญ์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ๊ฒฝ๊ณ ๋Š” ๋งŽ์€ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” HTML Pascal/Camel ์ผ€์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์›น ํ‘œ์ค€์„ ๊นจ๊ณ  ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ž‘์€ ๋ถ€๋ถ„์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜๋ฉด ๋ณต์žก์„ฑ์˜ ๋˜ ๋‹ค๋ฅธ ๊ณ„์ธต์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‚˜์œ ์Šต๊ด€์„ ์œ ๋ฐœํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ธ์  ๊ฐ€๋Š” Vue๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ณณ์—์„œ ์ž‘์—…ํ•ด์•ผ ํ•˜๋ฏ€๋กœ HTML์ด ๋‹ค๋ฅด๊ฒŒ ๊ตฌ๋ฌธ ๋ถ„์„๋˜๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ‘œ์ค€์„ ์œ ์ง€ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๋ฅผ ์˜ค๋„ํ•˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@paulpflug ์— ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝ๊ณ ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ž‘์—…์ด ์ค„์–ด๋“ค๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ค์‹œ ์˜ฌ๋ฐ”๋ฅธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๊ตฌํ˜„๋˜์–ด์„œ๋Š” ์•ˆ ๋˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ์ข‹์€ ์ฃผ์žฅ ์‚ฌ๋ก€: http://eisenbergeffect.bluespire.com/on-angular-2-and-html/

์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ๋žŒ๋“ค์ด Angular 2๋ฅผ ์‹ซ์–ดํ•˜๋Š” ์ฃผ์š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๋„๋ก ์œ ์ง€ํ•˜๋Š” ๋ฐ ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ํ•œ๋•Œ HTML์ด ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋„๋ก ์ดˆ์•ˆ์„ ์ž‘์„ฑํ–ˆ์œผ๋ฉฐ ๋„ˆ๋ฌด ๋งŽ์€ ๋ฌธ์ œ์™€ ๋„ˆ๋ฌด ๋งŽ์€ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ์ƒํ™ฉ ๋•Œ๋ฌธ์— ํ๊ธฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@blake-newman: ์ด์™€ ๊ด€๋ จํ•˜์—ฌ @yyx990803 ์€ ์ด๋ฏธ ์ด์ „ ๋Œ“๊ธ€ ์—์„œ ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@jamesxv7 ๊ทธ ์˜๊ฒฌ์€ ๊ทธ๊ฒƒ์„ ๊ฝค ์ž˜ ์š”์•ฝํ•ฉ๋‹ˆ๋‹ค. Evan์€ HTML ์‚ฌ์–‘ ๋ณ€๊ฒฝ์„ ์ œ์•ˆํ•˜์ง€ ์•Š๊ณ  Vue๊ฐ€ ๊ตฌ์„ฑ ์š”์†Œ ์ด๋ฆ„์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณ€๊ฒฝํ•  ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์ผ€๋ฐฅ์„ ๋‚™ํƒ€๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ผ์น˜ํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ๋Œ€์‹  (์ผ€๋ฐฅ์„ ์ˆ˜์šฉํ•˜๊ธฐ ์œ„ํ•ด) ๋Œ€์‹œ๋ฅผ ์ œ๊ฑฐํ•œ ๋‹ค์Œ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. HTML ์ž์ฒด๋Š” ๊ณ„์† ์‚ฌ์–‘์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์‚ฌ์•…ํ•˜๊ฑฐ๋‚˜ ๋‚˜์œ ์„ ํƒ์ด ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค :)

@yyx990803 <MyComponent> ์Šคํƒ€์ผ์„ ์Šน๊ฒฉ๋œ ์Šคํƒ€์ผ๋กœ ๊ณ„ํšํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ(์˜ˆ: ๋ฌธ์„œ ๋ฐ ์˜ˆ์ œ๋Š” ์ด๋ ‡๊ฒŒ ์ž‘์„ฑ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค), ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ ์˜ต์…˜์ด ๋  ๊ฒƒ์ด๋ฉฐ ์ผ€๋ฐฅ ์ผ€์ด์Šค ์Šคํƒ€์ผ์ด ๊ธฐ๋ณธ ์Šคํƒ€์ผ๋กœ ๋‚จ์„ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

@blake-newman ์ด ์ฃผ์„ ์„ ์ฝ์œผ์‹ญ์‹œ์˜ค - ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค :)

@paulpflug @guidobouman : vue-loader ๋˜๋Š” vueify ์˜ ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ camelCase ํƒœ๊ทธ ๋ฐ ์†์„ฑ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Ÿฐํƒ€์ž„ ์‹œ HTML ํŒŒ์„œ ๋™์ž‘์œผ๋กœ ์ธํ•ด ์ผ€์ด์Šค ์ •๋ณด๊ฐ€ ์ด๋ฏธ ์†์‹ค๋˜์—ˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ camelCase ๊ฒ€์‚ฌ๋Š” ์ปดํŒŒ์ผ ์‹œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ vue-loader ๋˜๋Š” vueify ์—†์ด Vue๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@yyx990803 - ๊ทธ๋Ÿฌ๋‚˜ ์›น ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ๋งํฌ๋œ @blake-newman ์‚ฌ์–‘์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ •์˜ ์š”์†Œ ์œ ํ˜•์€ ์‚ฌ์šฉ์ž ์ •์˜ ์š”์†Œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ณ  NCName ์ƒ์„ฑ๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•˜๋Š” ์ผ๋ จ์˜ ๋ฌธ์ž์ด๋ฉฐ _U+002D HYPHEN-MINUS ๋ฌธ์ž๋ฅผ ํฌํ•จํ•ด์•ผ ํ•˜๊ณ  _๋Œ€๋ฌธ์ž ASCII ๋ฌธ์ž๋ฅผ ํฌํ•จํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค_.

๊ทธ๊ฒƒ์ด Vue ๊ตฌ์„ฑ ์š”์†Œ์™€ ์–ด๋–ป๊ฒŒ ๊ด€๋ จ๋˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ์—์„œ๋Š” ์›น ๊ตฌ์„ฑ ์š”์†Œ ํ‘œ์ค€์„ ๋Š์Šจํ•˜๊ฒŒ ๋”ฐ๋ฅด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Vue.js ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์›น ๊ตฌ์„ฑ ์š”์†Œ ์‚ฌ์–‘์˜ ์ผ๋ถ€์ธ ์‚ฌ์šฉ์ž ์ง€์ • ์š”์†Œ์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ˆˆ์น˜์ฑ„์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ Vue.js์˜ ๊ตฌ์„ฑ ์š”์†Œ ๊ตฌ๋ฌธ์€ ์‚ฌ์–‘์— ๋”ฐ๋ผ ๋Š์Šจํ•˜๊ฒŒ ๋ชจ๋ธ๋ง๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” camelCase์™€ PascalCase๋ฅผ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € ์‚ฌ์–‘์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์Šค์ฝง

@smolinari the Vue ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด '์—„๊ฒฉํ•˜๊ฒŒ'๊ฐ€ ์•„๋‹ˆ๋ผ '๋Š์Šจํ•˜๊ฒŒ ๋ชจ๋ธ๋ง'๋˜์—ˆ์œผ๋ฉฐ ๋‚ด ์ƒ๊ฐ์—๋Š” ์ด ๋ณ€๊ฒฝ์˜ ์—ฌ์ง€๊ฐ€ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

@yyx990803 ์‚ฌ๋ก€ ์ •๋ณด๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ…œํ”Œ๋ฆฟ์— 'mycOmponent'๋ฅผ ์ž‘์„ฑํ•˜๋ฉด mycomponent ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„๋˜์ง€๋งŒ ์˜ˆ์ƒ๋˜๋Š” ๊ฐ’์€ my-component ์ด๋ฉด Vue(๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ)๋Š” my-component mycomponent ๋ฅผ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. my-component ๋ฐ ์ž˜๋ชป๋œ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์‹ค ์‚ฌ๋ก€ ์ •๋ณด๋Š” ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  ์ง์ ‘ ์ผ์น˜์‹œํ‚ค๋Š” ์˜ต์…˜์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ œ์•ˆ๋œ ๋™์ž‘๊ณผ ๋™์ผ).

-1 camelCase/PascalCase๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. HTML์—์„œ JS์™€ ๊ฐ™์€ ๊ตฌ๋ฌธ์„ ๋ณด๋Š” ๊ฒƒ์€ ๋‹ค์†Œ ์–ด์ƒ‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ jsx๋ฅผ ์ฐธ์„ ์ˆ˜ ์—†๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ด์œ ์ž…๋‹ˆ๋‹ค.
@paulpflug ์˜ ์ œ์•ˆ์— +1. ๋ฌธ์ œ๊ฐ€ ์˜จ๋ณด๋”ฉ ์ดˆ๋ณด์ž์ธ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌธ์ œ๋ฅผ ์•Œ๋ฆฌ๋Š” ๊ฒฝ๊ณ ๋ฅผ ๋ฐœํ–‰ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@paulpflug ๋Š” ํƒ€๋‹นํ•œ ์ƒ๊ฐ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค!

๋™์˜ํ•ฉ๋‹ˆ๋‹ค. 'mycomponent' is missing, did you mean 'my-component'? ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์ด ์ž๋™ ๋Œ€์ฒด๋ณด๋‹ค ๋‚ซ๋‹ค๋Š” ๋Š๋‚Œ์ด ๋“ญ๋‹ˆ๋‹ค.

@ yyx990803 ๊ธ€๋กœ๋ฒŒ ์˜ต์…˜ API์—์„œ ์ด๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
์˜ˆ
Vue.config.kebab = true (๊ธฐ๋ณธ๊ฐ’) -> <my-component :my-prop="msg"></my-component>
Vue.config.kebab = false -> <MyComponent :myProp="msg"></MyComponent>

@yyx990803
์šฐ๋ฆฌ๊ฐ€ ์ถ”๊ตฌํ•˜๋Š” ์ด์ƒ์€ ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
@rpkilby ๊ฐ€ ๋งํ–ˆ๋“ฏ์ด <MyComponent myCustomProp="myProp" data-name="prop" aria-label="Close" onclick="myDialog.close()"> ๊ฐ€ ์ด์ƒํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

๋ณธ์งˆ์ ์œผ๋กœ ๋ฌธ์ œ๋Š” js์™€ html์ด ๋‹ค๋ฅธ ๊ธฐ์ˆ ์ด๊ณ  ๋‹ค๋ฅธ ์ด๋ฆ„ ์ง€์ • ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‘ ๊ธฐ์ˆ  ๋ชจ๋‘์—์„œ ๋™์ผํ•œ ๊ฒฝ์šฐ(์ผ€๋ฐฅ ๋˜๋Š” ๋‚™ํƒ€)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด์ƒํ•œ ์ ์ด ํ•œ ๊ณณ์—์„œ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ด๋™ํ•˜์ง€๋งŒ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” ๊ณ„์†๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค .
๊ทธ๋ž˜์„œ ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์„ ์„ ๋‹คํ•ด ์„ ์„ ๊ธ‹๋Š”๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ผ์ธ i,e. html ์ปจํ…์ŠคํŠธ์˜ ์ผ€๋ฐฅ ์ผ€์ด์Šค์™€ js ์ปจํ…์ŠคํŠธ์˜ camleCase(๋ฐ PascalCase)๋Š” ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค .

๊ทธ๋ž˜์„œ IMO, ์šฐ๋ฆฌ๋Š” ๋” ๋‚˜์€ ๊ฒƒ์„ ์ฐพ๋Š” ๋Œ€์‹  ํ˜„์žฌ์˜ ๊ทœ์•ฝ์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ดˆ๋ณด์ž๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ๊ฒฝ๊ณ ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

@prog-rajkamal ์˜ˆ, ์ด์ œ ๊ฒฝ๊ณ ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด์ œ ๊ฒฝ๊ณ ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์— ํˆฌํ‘œํ•ฉ๋‹ˆ๋‹ค:+1:.

์Šค์ฝง

:+1: ๊ฒฝ๊ณ  ์ถ”๊ฐ€

:+1: ๊ฒฝ๊ณ ์—๋„

ccf9bede6bc39fb62e43e1efe98136c5f35dae6b & d7b55c4ee8491dbd853e28a1527050d2d1e7deab

๊ฒฝ๊ณ ๋Š” ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ์‚ฌ์šฉ์ž ์ง€์ • ์ด๋ฒคํŠธ๊ฐ€ ์‘๋‹ตํ•˜์ง€ ์•Š์€ ์ด์œ ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ํ•œ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค.

PascalCase ๊ตฌ์„ฑ ์š”์†Œ ๋˜๋Š” ์†Œํ’ˆ์˜ kebab-case ๋ฒ„์ „์— ์‘๋‹ตํ•˜๋Š” ํ•ด๋‹น ๊ตฌ์„ฑ ์š”์†Œ ๋˜๋Š” ์†Œํ’ˆ์ด ์žˆ์œผ๋ฉด ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ์—์„œ ์˜คํƒ€๋ฅผ ๋งŒ๋“ค๋ฉด Vue๊ฐ€ ์ด์— ๋Œ€ํ•ด ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด๋ณ„๋กœ ์—†์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ๋ฉด v-on:keyup ๋˜๋Š” @keyup ์™€ ๊ฐ™์€ ๊ธฐ๋ณธ ๊ธฐ์กด ์ด๋ฒคํŠธ ์†Œํ’ˆ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

๋‚ด ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์— @guidobouman <my-component v-on:customEvent="myMethod"> ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์‹ ๊ตฌ์„ฑ ์š”์†Œ์—๋Š” this.$emit('customEvent'); ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ€๋ชจ๊ฐ€ ๋“ฃ๋Š” ์‹ค์ œ ์ด๋ฒคํŠธ๋Š” ๋ฌผ๋ก  customEvent customevent ์ด์ง€๋งŒ ๋””๋ฒ„๊ทธํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์•Œ์•„๋‚ด๋Š” ๋ฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ๋‚˜ ๊ฐ™์€ ๊ฑด๋ง์ฆ์ด ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋‚™ํƒ€์˜ ๊ฒฝ์šฐ ์†์„ฑ์ด ์ด์™€ ๊ฐ™์ด ๊ตฌ๋ฌธ ๋ถ„์„๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ๊ฒฝ๊ณ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด๊ฒƒ์€ ์ด๋ฏธ ์œ„์—์„œ ๋…ผ์˜๋˜์—ˆ์œผ๋ฉฐ ๊ทธ๋ ‡๋‹ค๋ฉด ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@anthonygore ๋ถˆํ–‰ํžˆ๋„ Vue๊ฐ€ ์•ก์„ธ์Šคํ•˜๊ธฐ ์ „์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ html์„ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์งˆ๋ฌธ์€ Vue๊ฐ€ ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ผ€๋ฐฅ ์ผ€์ด์Šค๋ฅผ ๊ธฐ์–ตํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

๋ฉ”๋ชจ๋ฆฌ์— ์ปค๋ฐ‹ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๊ทœ์น™: HTML = kebab-case, JavaScript = camelCase

HTML์€ ์†์„ฑ๊ณผ ํƒœ๊ทธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. v-bind ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์†์„ฑ ๊ฐ’์€ JavaScript ํ‘œํ˜„์‹์ด๋ฏ€๋กœ ๋‘ ๋ฒˆ์งธ ๋ฌธ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋‚ด ์งˆ๋ฌธ์€ Vue๊ฐ€ ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? vue ํŒŒ์ผ์—์„œ ์ผ€๋ฐฅ ์ผ€์ด์Šค๋ฅผ ๊ธฐ์–ตํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ดˆ์‹ฌ์ž ์ž…์žฅ์—์„œ๋Š” ๋” ์–ด์ƒ‰ํ•ด ์ง‘๋‹ˆ๋‹ค.. ๊ทธ๊ฑธ ์œ„ํ•ด ์ง€๋‚œ 20๋ถ„์„ ํ—ˆ๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค...

๋‚ด๊ฐ€ ๋ฐฉ๊ธˆ ๊ตฌ๊ธ€๋งํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง€๋‚œ 1.5์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค... dxmn

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰