Vue ๊ตฌ์ฑ ์์์ ์ ๋ฌ๋ ์์ฑ์ ๋ฃจํธ ์์๊ฐ ์๋๋ผ ํ์ ์์์ ์ถ๊ฐ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ด UI ๊ตฌ์ฑ ์์ ์์ ์์ฑ์ด div
๋ํผ ๋์ input
์์์ ์ถ๊ฐ๋๋๋ก ํ๋ ค๋ฉด ์์ฒญ๋ ์์ ์ํ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ํ ์์ ์์์ ๋ชจ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์์ ์์์ ๋
ธ์ถํ๋ ๊ฒ์ด ์ข
์ข
๋ฐ๋์งํ๋ฉฐ ์์๊ฐ ๋ฃจํธ๊ฐ ์๋ ๊ฒฝ์ฐ ํ์ฌ ๋ง์ ์์ฉ๊ตฌ๊ฐ ํ์ํฉ๋๋ค(์ด ๊ฒฝ์ฐ .native
์์ ์๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ).
ํธ์ง: ํ ๋ก ์ ๋ฐ๋ผ์ก์ผ๋ ค๋ฉด ์ฌ๊ธฐ ์์
ํ์ฌ ๊ธฐ๋ณธ์ ์ผ๋ก "๋ ธ์ถ๋" ์์(์์ ์์ฑ์ ์ถ๊ฐํ ์ ์๋ ์์)๋ ํญ์ ๋ฃจํธ ์์์ ๋๋ค. ์ ์ง์๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋ ธ์ถ๋ ์์๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์ง์๋ฌธ ์ด๋ฆ์ ๋ํ ๋ช ๊ฐ์ง ์์ด๋์ด:
v-expose
(์๋ง๋ ๊ฐ์ธ์ ์ผ๋ก ๊ฐ์ฅ ์ข์ํ๋ ๊ฒ)v-expose-attrs
(๋ ๋ช
ํํ์ง๋ง ๋ ๊น๋๋ค)v-main
v-primary
v-expose
๊ฐ ์์์ ์ถ๊ฐ๋๋ฉด ๊ตฌ์ฑ ์์์ ์ ๋ฌ๋ ์์ฑ์ ํ์ฉํ๋ฉฐ ์ด๋ฌํ ์์ฑ์ ๋ฃจํธ ์์์ __๋ ์ด์ ์ ๋ฌ๋์ง ์์ต๋๋ค__.
์ข์ ๋ค๋ฅธ ๊ธฐ๋ฅ:
v-expose
๋ ๋ฌธ์์ด ๋๋ ๋ฌธ์์ด ๋ฐฐ์ด(์: v-expose="class"
๋๋ v-expose="['class', 'type', 'placeholder']"
)์ ํ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ด๋ฌํ ์์ฑ์ ๋ฃจํธ ์์ ๋์ ์์์ ์ถ๊ฐ๋์ง๋ง ๋ค๋ฅธ ๋ชจ๋ ์์ฑ์ ๋ฃจํธ ์์ ๋๋ ๊ฐ์ด ์๋ v-expose
์์์ ์ถ๊ฐ๋ฉ๋๋ค. .ํ , ๊ทธ๊ฑด ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๊ทธ๋ฐ ๊ตฌ์ฑ ์์์ ๊ฒฝ์ฐ JSX ๋๋ createElement
๋ฅผ ์ฌ์ฉํ์ฌ ์ํ์ ํผ๋จ๋ฆด ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
https://github.com/doximity/vue-genome
์ฐ๋ฆฌ์๊ฒ ์ด๊ฒ์ ํ๋ฅญํ ๊ฒ์ ๋๋ค. ์คํ์ผ ์ง์ ๋ฐ ux ๋ชฉ์ ์ผ๋ก ๋ชจ๋ ์ ๋ ฅ์ ๋ ์ด๋ธ๋ก ๋ํํฉ๋๋ค. ๋์ jsx๋ก ๋๋กญ๋ค์ดํ ์ ์๋ค๋ ๋ฐ ๋์ํ์ง๋ง ํ ํ๋ฆฟ์ ๋ชจ๋๊ฐ ๋ฐ๋ผํ๊ธฐ๊ฐ ํจ์ฌ ์ฝ์ต๋๋ค.
@Austio , ๋ถํํ๋ ํ
ํ๋ฆฟ์ ๋ํ spread
์ํ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๊ฐํ ์ ์์ต๋๊น?
๊ฐ์ธ์ ์ผ๋ก ์ด ๊ธฐ๋ฅ์ด ๋ง์์ ๋ญ๋๋ค. ๊ทธ๋ฌ๋ ๋๋๋ก ๋ฃจํธ ์์์ ๋ํ class
์์ฑ์ ๋ฐ์ธ๋ฉํด์ผ ํ๋ ๊ฒ์ฒ๋ผ v-bind ๋์์ ์ผ๊ด์ฑ์ ๊นจ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ํ ์์ ์ง์๋ฌธ์ getter ๋ฐ setter๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
๊ตฌ์ฑ ์์ ๋ด๋ถ์์ v-expose
์ต์ปค๋ฅผ ์ ์ํฉ๋๋ค.
<input v-expose="foo" />
๊ทธ๊ฒ์ ์ฌ์ฉํ ๋:
<the-component v-define:foo="{propA: '', propB: ''}"></the-component>
<!-- or maybe use v-bind for it directly -->
<the-component :foo="{propA: '', propB: ''}"></the-component>
@jkzing , ๋ฉ์์ด ๋ณด์ด์ง๋ง ๋ค์ ๊ธฐ๋ณธ ์คํ๋ ๋์ฒ๋ผ ๋ณด์ด๊ณ @keyup.enter.prevent="myAction"
์ด๋ป๊ฒ ์ ์ํ ๊ฒ์ธ๊ฐ์ ๊ฐ์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
<the-component :foo="{'@keyup.enter.prevent': myAction}"></the-component>
๋ง ํ ์๋ ์์ต๋๋ค. ์ฆ, ๋ฐํ์์ enter
๋ฐ prevent
์ ๊ฐ์ ๋ชจ๋ ์์ ์๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค(vue-template-compiler์ ์ผ๋ถ์
๋๋ค). ATM)
@nickmessing
๊ธฐ๋ณธ ์คํ๋ ๋์ฒ๋ผ ๋ณด์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒ์ ํ ํ๋ฆฟ ์ฌ์ฉ์๋ฅผ ์ํ ์คํ๋ ๋์ ๊ฐ์ ๊ฒ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋๋ค.
<the-component :foo="{'@keyup.enter.prevent': myAction}"></the-component>
@
๋ v-on shortland์ด๋ฉฐ prop
(v-bind)๋ฅผ ์๋ฏธํ์ง ์์ต๋๋ค.
@jkzing , ์ค๋ช
์ ๋งํฌ์๋ v-on
๋ฐ์ธ๋ฉ๋ ๋ง์ด ์์ต๋๋ค.
@nickmessing ์... v-on
๋ฐ์ธ๋ฉ์ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง๊ณผ ๊ฐ์ ๋ ๋ค๋ฅธ ์ฃผ์ IMO์
๋๋ค. ๐ค
@jkzing , ๊ทธ๊ฒ์ v-expose
afaik์ ์ ์ฒด ๊ฐ๋
์ด์์ต๋๋ค. ๋ชจ๋ ์์ฑ์ ๊ตฌ์ฑ ์์์ ํน์ ์์๋ก "์ด๋"ํ๊ฒ ๋ง๋๋ ๊ฒ์
๋๋ค.
@nickmessing , ์๋ ์ ์์ ๋ํด ํ์ ํ ์ ์์ง๋ง ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ attribute
๋ก ๊ฐ์ฃผ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
@jkzing , ์๋ง ์๋ ์๋ ์์ง๋ง, >9000๊ฐ์ ๋ค๋ฅธ ์ํ์ ๊ฐ์ง ์ ์๋ <my-awesome-text-input />
์ ์ผ๋ฐ์ ์ธ ์๋ฅผ ๊ณ ๋ คํ ๋, ๋น์ ์ ๊ทธ๊ฒ๋ค์ด ๋ชจ๋ <input />
์ ๋๋ฌํ๊ธฐ๋ฅผ ์ํฉ๋๋ค. ์ฝ๋์.
์ ๋ ๊ฐ์ธ์ ์ผ๋ก v-bind="$props"
ํ๊ฑฐ๋ ํํฐ๋งํ์ฌ ์ ์ฉํ๊ณ ์ถ์ง ์์ ์ํ์ ์ ์ธํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์
๋ ฅ์ ์ฌ๋ฌ ์ํ์ ํ ๋ฒ์ ์ ์ฉํ ์ ์์ต๋๋ค. ์ค์ ๋ก v-expose๋ ์
๋ ฅ๊ณผ ๊ฐ์ ๋ํผ ๊ตฌ์ฑ ์์์ ๊ฒฝ์ฐ ๋ชจ๋ html ์ํ์ ์ง์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋์ ์ด๊ฑฐ
https://github.com/almino/semantic-ui-vue2/blob/master/src/elements/Input.vue#L9
์งํก์ด๋ v-bind="$props"
๋๋ v-bind="filteredProps"
๋ก ์ถ์๋ฉ๋๋ค. ์ฌ๊ธฐ์ filterProps๋ ์ผ๋ถ ๊ณ์ฐ๋ ์์ฑ์ผ ์ ์์ต๋๋ค.
@cristijora ์ฐ๋ฆฌ๋ v-bind="someProps"
์์ต๋๋ค. ์ด ์๋ฃจ์
์ ๋ฌธ์ ๋ ๊ณผ๋ํ ์์ฑ์ด HTML ์์ฑ์ผ๋ก ์ถ๊ฐ๋๋ค๋ ๊ฒ์
๋๋ค. v-bind=
๊ฐ ๊ตฌ์ฑ ์์์์ ํ์ฉํ์ง ์๋ ๋ชจ๋ ์์ฑ์ ํํฐ๋งํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์
๋๋ค. ๋์ <component>
๋ฅผ ์ฌ์ฉํ๋ฉด ๊ณ์ฐ๋ ์์ฑ์์ ์ด๋ค props๋ฅผ ํํฐ๋งํ ์ง ๋ชจ๋ฆ
๋๋ค. ๊ทธ๊ฒ์ ๊ฐ๋ฅํ์ง๋ง ์ถ์ถ options.props
์ฌ์ฉํ lodash._pick
.
์ด๊ฒ์ด ๋๋ ํฐ๋ธ๋ก ์ ๋ง ๊ฐ๋ฅํฉ๋๊น?
@posva , ๋๋ ์ด๊ฒ์ด ๊ทธ ์์ฒด๋ก ์ง์๋ฌธ์ผ๋ก ์๋ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ๋ด๋ถ์ ์ผ๋ก ํ์ฐ + ์ผ๋ถ ์ด๋ฒคํธ ์ ํ์ ๊ฐ์ ์์ ์ ์ํํ๋ vue ํ ํ๋ฆฟ ์์ง์ ์ผ๋ถ๊ฐ ๋ ์ ์์ต๋๋ค.
@posva ์ฌ์ฉ์๊ฐ ๋ง๋ ์ง์๋ฌธ์ด ์๋๋ผ๊ณ ์๊ฐํ๋ฏ๋ก ์๋ชป๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์์ ์ ์์ต๋๋ค. ๋ด๊ฐ ์๋ฏธํ๋ ๊ฒ์ ๋จ์ง "ํน์ํ ์์ฑ"์ ๋๋ค.
@chrisvfritz API๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง์ ๋ํ ์๊ฐ์ด
๋๋ ์ด๊ฒ์ด ๊ฐ๋ ์ ์ ๊ณต/์ฃผ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฒ๊ณผ ์ ์ฌํ๋ค๋ ๊ฒ์ ์ ์ ์์์ต๋๋ค.
@Austio ์ง๋ฌธ์ ์ดํดํ์ง ๋ชปํ ์๋ ์์ง๋ง ์๋ ๊ฒ์๋ฌผ์์ API์ ๋ํ ๋ช ๊ฐ์ง ์๊ฐ์ ์ ๊ณตํฉ๋๋ค.
Hey Chris๋ ๋ถ๋ชจ์์ ๋ ธ์ถ๋ ์ ์๋ ๊ฒ์ ์ ์ธํ ๋ค์ ์์์์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ์ ์ฌํ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํ ์ถ๊ฐ ์๊ฐ์ ์๋ฏธํ์ต๋๋ค.
์, ์๊ฒ ์ต๋๋ค. ๊ทธ๋ด ํ์๊ฐ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ ๋ณด๋ ์ด๋ฏธ ์ํ๊ณผ ์ฌ๋กฏ์ ํตํด ์ ๋ฌ๋ ์ ์์ผ๋ฉฐ ๋ถ๋ชจ์ ๊ฐ์ธ ์์ฑ๋ this.$parent
๋ก ์ก์ธ์คํ ์ ์์ง๋ง ์ด๋ฌํ ํจํด์ ํผํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
@Austio ์๊ฐํ๊ณ ์๋ ํน์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๊น?
@chrisvfritz ๋ ๋๋ง ๊ธฐ๋ฅ์์ ์ด๋ป๊ฒ ์๋ํฉ๋๊น?
๋ค์๊ณผ ๊ฐ์ด ํ๋ ๊ฒ์ด ๋ ๋์ ๊ฒ ๊ฐ์ต๋๋ค.
$attributes
๋ก ๋
ธ์ถํ์ญ์์ค. ์๋ฅผ ๋ค์ด (tbd๋ก ๋ช
๋ช
)$props
์ด๋ฏธ ๋ณด์ฌ์ค ๊ฒ์ฒ๋ผ v-bind๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ๊ณณ์ ์ถ๊ฐํ์ญ์์ค.v-bind="$attributes"
JSX/๋ ๋๋ง ๊ธฐ๋ฅ์์ ์ค์ง์ ์ผ๋ก ๋์ผํ๊ฒ ์๋ํ๋ค๋ ์ถ๊ฐ ์ด์ ์ด ์์ต๋๋ค.
@LinusBorg ๋๋ ๋น์ ์ด ์๊ฐํ๋ ๋ฐฉ์์ ์ข์ํฉ๋๋ค. ๐ ํจ์ฌ ๋ ์ง๊ด์ ์ ๋๋ค.
์ฐธ๊ณ ๋ก, ์ด API๊ฐ ์์ผ๋ฉด Vue์ ๋ค์ ์ฃผ์ ๋ฒ์ ์ด ์์ฑ ์๋ ์์์ ์์ ํ ์ ๊ฑฐํ์ฌ ๊ตฌ์ฑ ์์ ๊ฐ ํต์ ์ด ์์ชฝ์์ ๋ช ์์ ์ผ๋ก ์ ์ง๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด ๋์์ ํ๊ฐ์ ํํ๊ฑฐ๋ ์ ๊ฑฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ ์ต๋๋ค.
๊ทธ๊ฒ์ด ๊ฐ์น๊ฐ ์๋ค๋ฉด libs ๋ฑ์ ๋ง์ ๊ตฌ์ฑ ์์์ ํ์ํ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒฐ์ ํ๊ณ ์ปค๋ฎค๋ํฐ, ํนํ UI ์ปฌ๋ ์ ์์ฑ์์ ๋ ผ์ํด์ผ ํฉ๋๋ค.
์ ์๋ ๊ธฐ๋ฅ์ ๋ํ A: ์ด ์ ๋ณด๋ context.data.attributes
๋ฅผ ํตํด ๊ธฐ๋ฅ ๊ตฌ์ฑ ์์์์ ์ด๋ฏธ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ด ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ์คํด์ค ๊ตฌ์ฑ ์์์ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ค, ๋ง์ต๋๋ค. ๋ด๊ฐ ์ผ๋์ ๋๊ณ ์๋ ์ฃผ์ ๋ชฉ์ ์ UI ๊ตฌ์ฑ ์์ ์์ฑ์(ํ์ฌ ๋ฐ ๋ด๋ถ ๋ชจ๋)๋ฅผ ์ํด ์์ ์ ๋ ๊ฐ๋จํ๊ฒ ๋ง๋๋ ๊ฒ์ ๋๋ค. ํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ด ์์ต๋๋ค.
<input
v-bind:id="id"
v-bind:accept="accept"
v-bind:alt="alt"
v-bind:autocomplete="autocomplete"
v-bind:autofocus="autofocus"
v-bind:checked="checked"
v-bind:dirname="dirname"
v-bind:disabled="disabled"
v-bind:form="form"
v-bind:formaction="formaction"
v-bind:formenctype="formenctype"
v-bind:formmethod="formmethod"
v-bind:formnovalidate="formnovalidate"
v-bind:formtarget="formtarget"
v-bind:list="list"
v-bind:max="max"
v-bind:maxlength="maxlength"
v-bind:min="min"
v-bind:multiple="multiple"
v-bind:name="name"
v-bind:pattern="pattern"
v-bind:placeholder="placeholder"
v-bind:readonly="readonly"
v-bind:required="required"
v-bind:src="src"
v-bind:step="step"
v-bind:type="type"
v-bind:value="value"
v-on:keydown="emitKeyDown"
v-on:keypress="emitKeyPress"
v-on:keyup="emitKeyUp"
v-on:mouseenter="emitMouseEnter"
v-on:mouseover="emitMouseOver"
v-on:mousemove="emitMouseMove"
v-on:mousedown="emitMouseDown"
v-on:mouseup="emitMouseUp"
v-on:click="emitClick"
v-on:dblclick="emitDoubleClick"
v-on:wheel="emitWheel"
v-on:mouseleave="emitMouseLeave"
v-on:mouseout="emitMouseOut"
v-on:pointerlockchange="emitPointerLockChange"
v-on:pointerlockerror="emitPointerLockError"
v-on:blur="emitBlur"
v-on:change="emitChange($event.target.value)"
v-on:contextmenu="emitContextMenu"
v-on:focus="emitFocus"
v-on:input="emitInput($event.target.value)"
v-on:invalid="emitInvalid"
v-on:reset="emitReset"
v-on:search="emitSearch"
v-on:select="emitSelect"
v-on:submit="emitSubmit"
>
์๋ก์ด $attributes
์์ฑ์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ผ ์ ์์ต๋๋ค.
<input
v-bind="$attributes"
v-on:keydown="emitKeyDown"
v-on:keypress="emitKeyPress"
v-on:keyup="emitKeyUp"
v-on:mouseenter="emitMouseEnter"
v-on:mouseover="emitMouseOver"
v-on:mousemove="emitMouseMove"
v-on:mousedown="emitMouseDown"
v-on:mouseup="emitMouseUp"
v-on:click="emitClick"
v-on:dblclick="emitDoubleClick"
v-on:wheel="emitWheel"
v-on:mouseleave="emitMouseLeave"
v-on:mouseout="emitMouseOut"
v-on:pointerlockchange="emitPointerLockChange"
v-on:pointerlockerror="emitPointerLockError"
v-on:blur="emitBlur"
v-on:change="emitChange($event.target.value)"
v-on:contextmenu="emitContextMenu"
v-on:focus="emitFocus"
v-on:input="emitInput($event.target.value)"
v-on:invalid="emitInvalid"
v-on:reset="emitReset"
v-on:search="emitSearch"
v-on:select="emitSelect"
v-on:submit="emitSubmit"
>
๊ทธ๋๋ ์ด๋ฒคํธ๋ฅผ ๋
ธ์ถํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๋น v-on
์ง์๋ฌธ์ด ๋ถ๋ชจ์ ๋ชจ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ด ์์๋ก ์ ๋ฌํ ์ ์์ต๋๊น?
<input
v-bind="$attributes"
v-on
>
๋๋ ๋ฌถ๊ณ ์ถ์ ์ฌ๋ฌ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ v-expose
์ ๊ฐ์ ๊ฒ์ผ๋ก ๋์๊ฐ ์ ์์ต๋๋ค.
<input v-expose>
์ด๊ฒ์ ํน์ ๊ธฐ๋ฅ ์์ฒญ์ด ์๋๋ผ UI ๊ตฌ์ฑ ์์์ ๊ตฌ์ถ์ ๋จ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ด๋ฒ์ํ ๋ ผ์๋ก ๋ฐ๋์์ผ๋ฏ๋ก ์ด ๋ฌธ์ ์ ๋ ์ด๋ธ์ ๋ค์ ์ง์ ํ๊ฒ ์ต๋๋ค. ๐
์ด ์ฃผ์ ์ ๋ฆ์์ง๋ง ์ ๋ ๋ช ๊ฐ์ง ์๊ฐ์ด ์์ต๋๋ค.
v-bind
ํ์ฌ ์๋ฃจ์
๋ฐ ๋จ์ ์ฐ์ , ์ ๋ ์ด๋ฏธ v-bind="propObject"
๊ธฐ๋ฅ(๋งค์ฐ ๊ฐ๋ ฅํจ)์ ์ฌ์ฉํ๊ณ ์ฌ๋ํฉ๋๋ค. ์๋ฅผ ๋ค์ด bootstrap-vue ์๋ ๋ชจ๋ ๊ณณ(๋ฒํผ, ํ์, ๋๋กญ๋ค์ด ๋ชฉ๋ก ๋ฑ)์์ ์ฌ์ฉ๋๋ ๋ด๋ถ ๋งํฌ ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค. ๊ตฌ์ฑ ์์๋ ๊ธฐ๋ณธ ์ต์ปค๊ฐ ๋๋ ํผ๋ฒ ๋ ๋ผ์ฐํฐ ๋งํฌ ๊ธฐ๋ฐ href
๋ to
๋ฐ vm.$router
์กด์ฌํ๋ฏ๋ก ๊ฐ๊ฐ์ ์กฐ๊ฑด๋ถ๋ก ์ ๋ฌํ ์์ฑ์ด ์๋นํ ๋ง์ต๋๋ค. ์ด๋ฌํ ๊ตฌ์ฑ ์์์.
์ฐ๋ฆฌ์ ํด๊ฒฐ์ฑ
์ ์ด๋ฌํ ์ํ์ ๋ฏน์ค์ธ์ ๋ฃ๊ณ ๊ณ์ฐ๋ ๊ฐ์ฒด์ ํจ๊ป v-bind="linkProps"
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด์์ต๋๋ค. ์ด๊ฒ์ ํ๋ฅญํ๊ฒ ์๋ํ์ง๋ง _๋งํฌ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ํด๋น ๋ฏน์ค์ธ์ ์ถ๊ฐํ๋ ๊ฒ์ ์ฌ์ ํ โโ๋ง์ ์ค๋ฒํค๋์
๋๋ค.
v-expose
v-bind
์ฌ์ฉ ๊ฐ๋ฅ์ฑ๋๋ ๊ฐ์ธ์ ์ผ๋ก v-expose
์ ๊ฐ๋
์ ์ข์ํ๋ฉฐ ๊ธฐ๋ณธ ์ฌ๋กฏ + ๋ช
๋ช
๋ ์ฌ๋กฏ์ฒ๋ผ ์๋ํ ์ ์์ผ๋ฉฐ ์์ ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ช
๋ช
๋ ์์ฑ ์ฌ๋กฏ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ์์ฑ _"slot"_์ ํญ์ ๊ตฌ์ฑ ์์ ์์ฒด์ ์์ฑ์ ์ ๋ฌํ์ง๋ง(๋ณ๊ฒฝ ์ฌํญ ์์), ๋ค๋ฅธ ๋ช ๋ช ๋ ๋์์ ๊ตฌ์ฑ ์์์์ ์ง์ ํ ์ ์์ต๋๋ค. ์๋ง๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๋๋ค.
<template>
<my-component
<!-- Nothing new here -->
v-bind="rootProps"
<!-- This binds the `linkProps` object to the named attribute slot `link` -->
v-bind.link="linkProps"
/>
</template>
MyComponent.vue
:
<template>
<div>
<router-link v-expose="link" />
</div>
</template>
.native
๊ฐ ๋๋๋๋ก ๊ฐ๋ ฅํ ์์ ์๋ผ๋ ์ ์ ์ ์ธํ๊ณ ๋ ์ฌ๊ธฐ์ ์ถ๊ฐํ ๋ด์ฉ์ด ๋ง์ง ์์ต๋๋ค. ๋๋ฅผ ์ํด ๋ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. Vue ๊ฐ๋ฐ์์๊ฒ๋ ๊ฑฐ์ ์๋ ค์ง์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค(๊ฐ๋ฐ์๋ฅผ ์ด ๊ธฐ๋ฅ์ ๋
ธ์ถ์์ผ ํด๊ฒฐ๋๋ ๋ง์ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฌธ์ ๋ฅผ ๋ด
๋๋ค). ๋๋ ์ฌ์ดํธ์ ๋ ๋ง์ ๋ฌธ์์ ๊ฒ์ ์ง์์ ์ถ๊ฐํ๊ธฐ ์ํด ์น์ฌ์ดํธ์ PR์ ๊ฒ์ํ์ผ๋ฉฐ ์ ์ฌ์ ์ผ๋ก Google ๊ฒ์์ ์ต์ ํ๋์์ต๋๋ค.
๋ค๋ฅธ ๋ฌธ์ ์์ API ํ๋ฉด์ ๋ํ ๋
ผ์์์ ๋น๋กฏ๋, ๋๋ v-expose
์์ด๋์ด์ ํฌ์ด ์๋์ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ ๋ค๋ฅธ "์๋ ๋ฐฉ์"์ ์๊ฐํ๊ณ ํน๋ณํ ๊ฒ์ ๊ตฌํํ์ง ์์ผ๋ฉด JSX์์ ์๋ํ์ง ์์ต๋๋ค.
๋ด๊ฐ React ์ฌ๋๋ค์ ๋ํด ์กด๊ฒฝํ๋ ํ ๊ฐ์ง๋ ์ฌ๋ฆผํ API์ ๋ํ ํ์ ๊ณผ ๊ฐ๋ฅํ ํ ์ธ์ด์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ ์ ์์ ์์ฑ์ ๋ํ props์ ๋ํด ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ ํจํด์ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ด ๋ค๋ฅธ ์ถ์ํ๋ฅผ ๋์ ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋์ ๊ฒ ๊ฐ์ต๋๋ค.
<my-input
type="file"
mode="dropdown"
>
<template>
<div>
<input v-bind="$attributes">
<dropdown v-bind="{ ...$props, $attributes.type }"/>
</div>
</template
์, ์ง๊ธ ๋ฌด์จ ๋ง์์ ํ์๋์ง ์๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ์ด๊ฑฐ ์ข์! ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฐ์? vm.$attributes
๊ฐ ๋์ ์ถ๊ฐ๋ฉ๋๊น?
๊ทํ์ ์๊ฒฌ์ ๋ค์ ์ฝ์ผ์ญ์์ค. ์ง๊ธ ์ถ์ ์ค์ ๋๋ค ๐
์, $attributes
๊ฐ ์ถ๊ฐ๋ฉ๋๋ค.
๋ํ ๋ค์๊ณผ ๊ฐ์ด ๋ฃจํธ ์์์ ์์ฑ์ ์ ์ฉํ๋ ํ์ฌ ๊ธฐ๋ณธ ๋์์ ํด์ ํ๋ ์ต์
์ด ํ์ํฉ๋๋ค.
```html
๊ทธ๋ฌ๋ฉด Vue 3.0์ ๊ธฐ๋ณธ ์ค์ ์ด ๋ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ฉด ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํฉ๋๋ค.
@LinusBorg ์ฌ๊ฑด์ ์ธก๋ฉด์ ๋ค๋ฃจ๋ ๊ฒ์ ๋ํ ๋น์ ์ ์๊ฐ์ ๋ฌด์์
๋๊น? ๋์ผํ ์ ๋ต์ ๋ฐ๋ฅด๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ $listeners
์์ฑ์ ์ถ๊ฐํ ์๋ ์๋ค๊ณ ๊ฐ์ ํ์ต๋๋ค.
{
input: function () { /* ... */ },
focus: function () { /* ... */ },
// ...
}
๊ทธ๋ฌ๋ฉด v-on
๋ v-bind
์ ์ ์ฌํ ๊ฐ์ฒด๋ฅผ ๋ฐ์๋ค์ผ ์ ์์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋:
<input v-bind="$attributes" v-on="$listeners">
๋ด๊ฐ ์์ํ๋ ํ ๊ฐ์ง ๋ฌธ์ ๋ input
/ change
์ด๋ฒคํธ์ ๊ด๋ จํ์ฌ v-model
๊ฐ ์์์ ๋ํด ์๋ํ๋ ๊ฒ๊ณผ ๊ตฌ์ฑ์์์ ๋ํด ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ์๋ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋๋ ๋ํ ์ฐ๋ฆฌ๊ฐ $listeners
์ $nativeListeners
๋ ๋ค ์ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. $listeners
๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ .native
์์ ์๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ ์ ์์ต๋๋ค.
๋ํ applyComponentAttrsToRoot
์ต์
๊ณผ ๊ด๋ จํ์ฌ exposeRootEl
๊ฐ ์ข์ ์ด๋ฆ์ผ ์ ์์ผ๋ฉฐ false
๋ก ์ค์ ํ๋ฉด ์๋์ผ๋ก ์ ์ฉ๋ ์์ฑ๊ณผ .native
์ด๋ฒคํธ๋ฅผ ๋ชจ๋ ๋นํ์ฑํํ ์ ์์ต๋๋ค. ์ ์ก?
Vue.config
๋ฅผ ํตํด ์ ์ฒด ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ๋จ์ผ ๊ตฌ์ฑ ์์์ ๋ํด ์ด ๊ธฐ๋ฅ์ ๋นํ์ฑํํ ์๋ ์์ต๋๋ค.
์ต๊ทผ์ $listeners
์ ๋ํด ๋น์ทํ ์๊ฐ์ ํ์ต๋๋ค.
context.data.listeners
๊ทธ๋์ ์ฐ๋ฆฌ๋ $props
, $attributes
, $listeners
๋๋ ๊ฒ์
๋๋ค.
$attributes
์ฌ์ฉํ ๊ฒ์ฒ๋ผ v-on="{...}"
๊ฐ์ฒด ๊ตฌ๋ฌธ์ ์์ฒญํ๋ #5578 ๋ ์์ต๋๋ค.
ํ์ง๋ง .native ์์ ์์ ๋ํด์๋ ํ์ ์ด ์์ง ์์ต๋๋ค. ๊ตฌ์ฑ ์์ ์ด๋ฒคํธ์ ๊ธฐ๋ณธ ์์ ๊ธฐ ๋ชจ๋์์ ์ด ์์ ์ ์ํํ๋ ค๋ฉด API๊ฐ ํจ์ฌ ๋ ๋ณต์กํด์ง๊ณ ๋ฃจํธ ์์์ ์ ์ฉ๋ ๊ธฐ๋ณธ ์ด๋ฒคํธ ์์ ๊ธฐ๊ฐ ์ํ๋ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ๊ณ์ ์ก์๋ด๋ฏ๋ก ์ฌ์ฉ์ด ์์ฌ์ค๋ฝ์ต๋๋ค. ํ ํ๋ฆฟ์ ํน์ ์์์ ํ ๋นํด์ผ ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ ์์ค ๊ตฌ์ฑ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ ํ ํ๋ฆฟ์ด ์์ ํ๊ธฐ ๋ถํธํ ๋ ๋ ๋๋ง ๊ธฐ๋ฅ์ด ์ ํธ๋์ด์ผ ํ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ค์์ด ์ค์ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
"props์์ ์ฐพ์ ์ ์๋ ๋ฐ์ธ๋ฉ์ ๋ฃจํธ ์์์ ๋ํ ์์ฑ์ผ๋ก ์๋ ์ ์ฉ"์ ๊ธฐ๋ณธ ๋์ ๋นํ์ฑํ(๊ด๋ จ ๋ฌธ์ : ์ด๊ฒ์ด class
๋ฐ style
๋ฐ์ธ๋ฉ์๋ ์ํฅ์ ๋ฏธ์นฉ๋๊น?)
๊ตฌ์ฑ ์์์ ์ธ๋ถ ๋ฐ์ธ๋ฉ์ ๋ฐ๋์ ๋ฃจํธ๊ฐ ์๋ ๋ด๋ถ ์์์ "์์"ํ๋ ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋ ธ์ถํฉ๋๋ค. ํ ํ๋ฆฟ๊ณผ ๋ ๋ ๊ธฐ๋ฅ ๊ฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๊ฒ์ด ์ด์์ ์ ๋๋ค.
ia kie like vue, ๊ฐ๋จํ ๋๊ตฌ
v2.4์์ ์ด๊ฒ์ ๋ํ PR์ ํ๋ฅญํ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค! ๐
๋ฆด๋ฆฌ์ค ๋ ธํธ์์
์ด๋ค์ ๊ฒฐํฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ ์์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋จ์ํํ ์ ์์ต๋๋ค.
<div>
<input v-bind="$attrs" v-on="$listeners">
</div>
์ข์ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ฌ์ค์ด ์๋๋๋ค. ์ด๋ฌํ ์ข
๋ฅ์ ๊ตฌ์ฑ ์์๋ v-model๊ณผ ํจ๊ป ์๋ํ๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ ๋ด๊ฐ ์๋ ํ ๊ตฌ์ฑ ์์๋ฅผ ๋ํํ๋ v-model์ ์ ๋๋ก ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์๋ฅผ ๋ค์ด ๋ํ ๊ตฌ์ฑ ์์์์ ์
๋ ฅ์ผ๋ก v-model์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์๊ฐ ์์ต๋๊น?
๋ด๊ฐ ์ฐพ์ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ :
https://jsfiddle.net/60xdxh0h/2/
ํ ํ๋ฆฟ๊ณผ ํจ๊ป ์๋ํ๋ ๊ธฐ๋ฅ์ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๊ฐ๋จํ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ข ๋ฅ์ ๊ตฌ์ฑ ์์๋ v-model๊ณผ ํจ๊ป ์๋ํ๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ ๊ตฌ์ฑ ์์๋ฅผ ๋ํํ๋ v-model์ด ์ ๋๋ก ์๋ํ์ง ์๋ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค.
์ ๊ทธ๋ ๊ฒ ์๊ฐํ ๊น์? v-model์ prop ๋ฐ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ๋ํ ๊ตฌ๋ฌธ ์คํ์ด๋ฉฐ ๋ ๋ค $attr/$props์ ์์ผ๋ฏ๋ก ์ฝ๊ฒ ์ ๋ฌํ ์ ์์ต๋๋ค.
์์ ์ต์
์ ๋ํ ์ง์์ด ํ์ํ ์ ์ผํ ๊ฒ์ ์์์ด model
๊ธฐ๋ณธ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ๋ฟ์
๋๋ค. ์ฌ์ค์
๋๋ค.
๊ทธ๋ฌ๋ ์ํฉ์ ๋ฐ๋ผ ์ฝ์ ์ ์์ต๋๋ค.
๋ฌผ๋ก ๋ฌธ๋ฒ์ ์ธ ์คํ์ด์ง๋ง ์ฝ๊ธฐ์ ํผ๋์ค๋ฌ์ธ ์ ์์ต๋๋ค.
์ด๋ค์ ๊ฒฐํฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ ์์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋จ์ํํ ์ ์์ต๋๋ค.
์ค์ ๋ก https://github.com/almino/semantic-ui-vue2/blob/master/src/elements/Input.vue ์์ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ ๋์ผํ ์ ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ๋ฆฌ์ค๋๋ฅผ ์ง์ ์ ๋ฌํ ์ ์์ต๋๋ค. (์: v-on:input="emitInput($event.target.value)" ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค)
์ด์จ๋ ์ด PR์ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์๊ณ ํ์ จ์ต๋๋ค!
@AlexandreBonaventure v-model
๊ฐ ์์์์์ ๊ตฌ์ฑ ์์์์ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ์๋ํ๊ธฐ ๋๋ฌธ์
๋๋ค. DOM ์ด๋ฒคํธ๋ ์ฝ๋ฐฑ์ ์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๋ ๋ฐ๋ฉด ๊ตฌ์ฑ ์์ ์ด๋ฒคํธ๋ ๊ฐ์ ์ง์ ์ ๊ณตํฉ๋๋ค. ๊ฒฐ๊ณผ๋ v-model
_does_ ์๋ํ์ง๋ง ๋ฐ์ธ๋ฉ๋ ๊ฐ์ DOM์ ์ด๋ฒคํธ ๊ฐ์ฒด์
๋๋ค. ๐
v-model
๊ฐ ์ฌ๊ธฐ์์ ์๋ํ๋ ๊ฒ์ด ๋ฐ๋์งํ ๊ฒ์ด๋ผ๋ ๋ง์์ด ์ณ๋ค๊ณ ์๊ฐํ์ง๋ง ํด๊ฒฐํ๊ธฐ์ ๊ฐ์ฅ ์ข์ ๊ณณ์ด ์ด๋์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ช ๊ฐ์ง ์์ด๋์ด:
์ด๊ฑฐํ ์ ์๋ ์์ฑ์ $listeners
์ถ๊ฐํ ์ ์์ต๋๋ค(์: __$listeners__: true
, v-on
๊ฐ v-on="$listeners"
์ฌ์ฉ์ ๊ฐ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ $listeners
๊ฐ์ฒด๊ฐ v-on
์ ๋ฌ๋๊ณ ๊ฐ ๋ฆฌ์ค๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ ์ ์์ต๋๋ค.
function (event) {
listener(event.target.value)
}
ํ ๊ฐ์ง ๋จ์ ์ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฒ๋ฆฌ๊ณ ์๋ค๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด ๋๊ตฐ๊ฐ๊ฐ keyCode
์ ์ก์ธ์คํ๋ ค๋ ๊ฒฝ์ฐ ์ด์ด ์ข์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ v-on
์ ๊ฐ์ฒด ๊ตฌ๋ฌธ์ ์์ ์๊ฐ ์ง์๋๋ ๊ฒฝ์ฐ .native
์๋ ๋ํ ๋์์ ๋นํ์ฑํํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
@yyx990803 @LinusBorg ํ๋น์ฑ์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์ธ์? ๋ด๊ฐ ๋์น๊ณ ์๋ ์ฃ์ง ์ผ์ด์ค๊ฐ ์์ต๋๊น?
์ค, ๋น์ ์ rral์ v-model์ ์ธ๊ธํ๊ณ ์์ต๋๋ค. ์์ ์์, ๋๋ ๊ตฌ์ฑ ์์์ ๋ํด ์๊ฐํ์ต๋๋ค.
์ด PR์ด ์๋ ์๋ ์ด์จ๋ ์ํ์ ๊ทธ๊ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ณ ๊ธ ์ฑ์์๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ค์ ๋๋ญ ๋๋ค(๋ฌ์ฑ ๊ฐ๋ฅํ๊ธด ํ์ง๋ง).
@LinusBorg ์ฐ๋ฆฌ๊ฐ ๊ฐ์ ํ์ด์ง์ ์๋์ง ํ์ธํ๊ณ ์ถ์ต๋๋ค. ์ด ํ
ํ๋ฆฟ์ด ํฌํจ๋ CustomInput
๊ตฌ์ฑ์์:
<div>
<input v-bind="$attrs" v-on="$listeners">
<div>
์๋ ์ฝ๋๊ฐ ์๋ํ ๊ฒ์ผ๋ก ์์ํ์ง ์์ต๋๊น?
<CustomInput v-model="myValue" />
๋๋ ๊ทธ๊ฒ์ด ์๋ํ ๊ฒ์ด๋ผ๊ณ ์์ํ์ง๋ง, ์๋ ์ฐ๋๋ฅด๋ฅผ ์ดํดํ ๋ฐฉ์์ ๊ตฌ์ฑ ์์๊ฐ ์๋ ์์์ v-๋ชจ๋ธ์ ์ฐธ์กฐํ๊ณ ์์์ต๋๋ค. ์ด๋ ๊ฒฐ๊ตญ ๋ณ๊ฒฝ ๋ก์ปฌ ์ํ์์๋ง ์๋ํฉ๋๋ค.
@chrisvfritz ๊ฐ ๊ทธ์ ํ๊ธฐ ๊ฒ์๋ฌผ์์ ์ค๋ช ํ ๋ด์ฉ์ ๋งํ๋ ค๊ณ ํ์ต๋๋ค. (๋ด ๋ชจ๊ตญ์ด๊ฐ ์๋ ์์ด ์ฃ์กํฉ๋๋ค :))
@LinusBorg ์ต์ ๋ฆด๋ฆฌ์ค์์ ์ด ์์ ์ ์ํํ ๋์ ๋ฌธ์ ๋ ์ฌ์ ํ ์ํฐ ํจํด์ผ๋ก ๊ฐ์ฃผ๋๊ณ ์ํ ๋ณ๊ฒฝ์ ๋ํ ๊ฒฝ๊ณ ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ค๋ ๊ฒ์ ๋๋ค.
value ์์ฑ์ด ๋ฌธ์์ด์ด ์๋ ๊ฒฝ์ฐ ์์ ์์ ์ ์ํํ๋ ๊ฒ์ด ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ๋ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ฐ์ ธ์จ ์ด๊ฑฐํ์ ์ ํ ์ต์ ์ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ ค๋ ์ฝค๋ณด ๊ตฌ์ฑ ์์๋ฅผ ์๋ก ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
<template>
<select class="combo" v-model="value" v-on="$listeners">
<option v-for="(item, key) in items" :value="item">{{key}}</option>
</select>
</template>
<script>
export default {
props: {
items: {
type: Object,
required: true
},
value: {}
}
}
</script>
๋ค์์ ์์ ํญ๋ชฉ์ ๋ํด ์ฌ์ฉํ๋ ๋ชฉ๋ก ์ค ํ๋์ ์์ ๋๋ค.
execList: {
"None": ACT_EXEC_TYPES.NONE,
"Function": ACT_EXEC_TYPES.FUNCTION,
"Code": ACT_EXEC_TYPES.CODE
}
์ฝค๋ณด ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ:
<combo :items="execList" v-model="selectedAction.execType"/>
๋๋ ์ง๊ธ 2 ์ผ ๋์์ด ์์
์ ์ํํ๋ ค๊ณ ํ์ง๋ง ์ฌ์ ํ ์ ๋ง ์ข์ ํ๊ณ ์์ต๋๋ค. ๋ฌธ์ ๋ $event.target.value ๊ฐ ํญ์ ๋ฌธ์์ด์ด๊ณ :value
์์ด์ผ ํ๋ ๊ฒ์ฒ๋ผ ํ๊ฐ๋์ง ์๋๋ค๋ ๊ฒ์
๋๋ค.
@LinusBorg @AlexandreBonaventure @RobertBColton ์ด ๋ฌธ์ ์ ๋ํ ํฅํ ํ ๋ก ์ ์ง์คํ ์ ์๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ๊ธ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@chrisvfritz ๋ ๋๋ง ๊ธฐ๋ฅ์์ ์ด๋ป๊ฒ ์๋ํฉ๋๊น?
๋ค์๊ณผ ๊ฐ์ด ํ๋ ๊ฒ์ด ๋ ๋์ ๊ฒ ๊ฐ์ต๋๋ค.
$attributes
๋ก ๋ ธ์ถํ์ญ์์ค. ์๋ฅผ ๋ค์ด (tbd๋ก ๋ช ๋ช )$props
์ด๋ฏธ ๋ณด์ฌ์ค ๊ฒ์ฒ๋ผ v-bind๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ๊ณณ์ ์ถ๊ฐํ์ญ์์ค.JSX/๋ ๋๋ง ๊ธฐ๋ฅ์์ ์ค์ง์ ์ผ๋ก ๋์ผํ๊ฒ ์๋ํ๋ค๋ ์ถ๊ฐ ์ด์ ์ด ์์ต๋๋ค.