Vueã³ã³ããŒãã³ãã«æž¡ãããå±æ§ãã«ãŒãèŠçŽ ã§ã¯ãªãããµãèŠçŽ ã«è¿œå ããå¿
èŠãããå Žåãå€ããããŸãã ããšãã°ããã®UIã³ã³ããŒãã³ãã§ã¯ãã©ãããŒdiv
ã§ã¯ãªããå±æ§ãinput
èŠçŽ ã«è¿œå ãããããã«ãä¿¡ããããªãã»ã©ã®éã®å°éå
·ã䜿çšããå¿
èŠããããŸãã
ããã«ããã©ãŒã èŠçŽ ã®ãã¹ãŠã®ã€ãã³ããªã¹ããŒã芪ã«å
¬éããããšãæãŸããå ŽåããããããŸããããã«ã¯ãèŠçŽ ãã«ãŒãã§ãªãå ŽåãçŸåšå€ãã®å®åæãå¿
èŠã§ãïŒãã®å Žåã .native
修食åã§åé¡ã解決ã§ããŸãïŒã ïŒã
ç·šéïŒè°è«ã«è¿œãã€ãããã«ãããã
çŸåšãããã©ã«ãã§ã¯ããexposedãèŠçŽ ïŒä»»æã®å±æ§ãè¿œå ã§ããèŠçŽ ïŒã¯åžžã«ã«ãŒãèŠçŽ ã§ãã æ°ãããã£ã¬ã¯ãã£ãã䜿çšããŠãå¥ã®å ¬éãããèŠçŽ ãå®çŸ©ã§ããŸãã ãã£ã¬ã¯ãã£ãã®ååã«é¢ããããã€ãã®ã¢ã€ãã¢ïŒ
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
å°éå
·ãvueãã³ãã¬ãŒãã«å
¥ããæ¹æ³ãèããããšãã§ããŸããïŒ
ç§ã¯å人çã«ãã®æ©èœã奜ãã§ãã ããããã«ãŒãèŠçŽ ã®class
ããããã£ããã€ã³ãããå¿
èŠãããå Žåãããããã«ãv-bindã®åäœã®äžè²«æ§ãæãªãããŠããããã§ãã
ã§ã¯ã次ã®ãããªã²ãã¿ãŒãšã»ãã¿ãŒãšããŠãã£ã¬ã¯ãã£ãã®ãã¢ã䜿çšããã®ã¯ã©ãã§ããïŒ
ã³ã³ããŒãã³ãå
ã§ã 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>
ã ããä¿æããããšã¯ã§ããŸãããã€ãŸããã©ã³ã¿ã€ã ïŒvue-template-compilerã®äžéšïŒã§enter
ãprevent
ãªã©ã®ãã¹ãŠã®ä¿®é£Ÿåãä¿æããå¿
èŠããããŸãã atmïŒ
@nickmessing
ããã¯åºæ¬çãªã¹ãã¬ããã®ããã«èŠããŸã
ç§ãã¡ã話ããŠããã®ã¯ããã³ãã¬ãŒããŠãŒã¶ãŒã«ã¹ãã¬ããã®ãããªãã®ãããããããšã§ã
<the-component :foo="{'@keyup.enter.prevent': myAction}"></the-component>
@
ã¯v-onã·ã§ãŒãã©ã³ãã§ããã prop
ïŒv-bindïŒãæå³ãããã®ã§ã¯ãããŸããã
@jkzing ã説æããã®ãªã³ã¯ã«ã¯ã v-on
ãã€ã³ãã£ã³ã°ããããããããŸã
@nickmessing Um ... 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"
ã«åæžãããŸããããã§ãfilteredPropsã¯èšç®ãããããããã£ã§ããå¯èœæ§ããããŸãã
@cristijora v-bind="someProps"
ã䜿çšããŠããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã®åé¡ã¯ãéå°ãªããããã£ãHTMLå±æ§ãšããŠè¿œå ãããããšã§ãã v-bind=
ããã³ã³ããŒãã³ãã«ãã£ãŠåãå
¥ããããªããã¹ãŠã®ããããã£ãé€å€ã§ããã°çŽ æŽããããšæããŸãã åçãª<component>
ã§ã¯ãèšç®ãããããããã£ã§ã©ã®å°éå
·ãé€å€ããããããããŸããã ããã¯æœåºããããšãå¯èœã§ããoptions.props
䜿ãlodash._pick
ã
ããã¯ãã£ã¬ã¯ãã£ãã§æ¬åœã«å®çŸå¯èœã§ããïŒ
@posva ãããèªäœã¯ãã£ã¬ã¯ãã£ããšããŠæ©èœãããšã¯æããŸããããå éšã§ã®æ¡æ£+ã€ãã³ãã®äŒæãªã©ãè¡ãvueãã³ãã¬ãŒããšã³ãžã³ã®äžéšã§ããå¯èœæ§ããããŸã
@posvaãŠãŒã¶ãŒãäœæãããã£ã¬ã¯ãã£ãã§ã¯ãªããšæãã®ã§ãééã£ãèšèªã䜿çšããŠããå¯èœæ§ããããŸãã ç§ãèšãããã®ã¯ãåãªããç¹å¥ãªå±æ§ãã§ãã
@chrisvfritz APIãã©ã®ããã«äœ¿çšããããã«ã€ããŠäœãèãããããŸããïŒå ¬éãããã®ãšåã«è¿œå ããæ¹æ³ãæå®ããŸãïŒ
ããã¯ãæŠå¿µãæäŸ/æ³šå ¥ããããã«äœ¿çšãããŠããã®ãšäŒŒãŠããããšãããããŸããã
@Austio質åãç解ããŠããªããããããŸããããå ã®æçš¿ã§APIã«ã€ããŠããã€ãèããŠããŸãã
ããã¯ãªã¹ã芪ã§å ¬éã§ãããã®ã宣èšããã€ã³ãžã§ã¯ããæäŸããããã«åæ§ã®ãã®ã䜿çšãã次ã«ãããåã§äœ¿çšããããšã«ã€ããŠã®è¿œå ã®èããæå³ããŸããã
ãããåãã£ãã ãã®å¿
èŠæ§ããããã©ããã¯ããããŸããã æ
å ±ã¯ãã§ã«å°éå
·ãã¹ããããä»ããŠæž¡ãããšãã§ããŸã-ãããŠèŠªã®ãã©ã€ããŒãããããã£ã§ããthis.$parent
ã§ã¢ã¯ã»ã¹ã§ããŸããããã®ãã¿ãŒã³ãé¿ããã®ãæåã ãšæããŸãã
@AustioããªããèããŠããç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã¯ãããŸããïŒ
@chrisvfritzããã¯ã¬ã³ããªã³ã°é¢æ°ã§ã©ã®ããã«æ©èœããŸããïŒ
å€åããã¯ããè¯ãã ãããšæããŸãïŒ
$attributes
ãšããŠå
¬éããŸãïŒtbdã«ååãä»ããïŒ$props
ãã§ã«ç€ºããããã«ãv-bindã䜿çšããŠå¥œããªå Žæã«è¿œå ããŸããv-bind="$attributes"
ããã«ã¯ãJSX /ã¬ã³ããªã³ã°é¢æ°ã§å®è³ªçã«åãããã«æ©èœãããšããè¿œå ã®å©ç¹ããããŸãã
@LinusBorgç§ã¯ããªãã®èãæ¹ã奜ãã§ãã ðããªãã®ããæ¹ã¯ã¯ããã«çŽæçã§ãã
è£è¶³ãšããŠããã®APIãå°å ¥ãããšãVueã®æ¬¡ã®ã¡ãžã£ãŒããŒãžã§ã³ã§å±æ§ã®èªåç¶æ¿ãå®å šã«åé€ã§ãããããã³ã³ããŒãã³ãéã®éä¿¡ãäž¡åŽã§æ瀺çã«ç¶æã§ãããšæããŸãã
ã¯ãããã®æ¯ãèããæžäŸ¡ååŽãŸãã¯åé€ããããšã¯å¯èœã§ãã
ããã䟡å€ãããå Žåã¯ãã©ã€ãã©ãªãªã©ã®å€ãã®ã³ã³ããŒãã³ãã§å¿ èŠã«ãªãå¯èœæ§ã®ããå€æŽã決å®ããã³ãã¥ããã£ãç¹ã«UIã³ã¬ã¯ã·ã§ã³ã®äœæè ãšè©±ãåãå¿ èŠããããŸãã
ææ¡ãããæ©èœã«ã€ããŠïŒãã®æ
å ±ã¯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 libã®åé¡ããããããããŸãïŒã ç§ã¯ãŠã§ããµã€ãã«PRãé
眮ããŠããµã€ãã«ããã¥ã¡ã³ããšæ€çŽ¢ãµããŒããè¿œå ããGoogleæ€çŽ¢çšã«æé©åããå¯èœæ§ããããŸãã
å¥ã®åé¡ã§APIãµãŒãã§ã¹ã«ã€ããŠã®è°è«ããæ¥ãŠãç§ã¯v-expose
ã¢ã€ãã¢ã®ãã¡ã³ã§ã¯ãªãããšãç¹°ãè¿ãå¿
èŠããããŸãã ããã¯å¥ã®ãç©äºã®ä»çµã¿ããå°å
¥ããããã«ç¹å¥ãªäœããå®è£
ããªããšJSXã§ã¯æ©èœããŸããã
Reactã®äººã ã«ã€ããŠç§ãå°æ¬ããŠããããšã®1ã€ã¯ãã¹ãªã ãªAPIãžã®åãçµã¿ãšãèšèªã®æ©èœãå¯èœãªéã䜿çšããããšã§ãã ãã®ç²Ÿç¥ã§ã¯ãå±æ§ã®å°éå ·ã«ãã§ã«ãããã¿ãŒã³ãåå©çšããããšã¯ãå¥ã®æœè±¡åãå°å ¥ãããããã¯ããã«åªããŠããããã«æãããŸãã
<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">
ç§ãäºæž¬ããåé¡ã®1ã€ã¯ã 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ãã¯ããã«è€éã«ãªããã«ãŒãèŠçŽ ã«é©çšããããã€ãã£ãã€ãã³ããªã¹ããŒãç®çã®ã€ãã³ãã®ãããªã³ã°ããã£ããããããã䜿çšã«åé¡ããããŸãããã³ãã¬ãŒãå ã®ç¹å®ã®èŠçŽ ã«å²ãåœãŠãå¿ èŠããããŸãã
äžè¬ã«ãäœã¬ãã«ã®ã³ã³ããŒãã³ãã©ã€ãã©ãªã®å Žåããã³ãã¬ãŒãã®æäœãé£ãããªã£ãŠããå Žåã¯ãã¬ã³ããªã³ã°é¢æ°ã䜿çšããããšããå§ãããŸãã ããããç§ã¯ä»¥äžã䟡å€ãããããšã«åæããŸãïŒ
ãã«ãŒãèŠçŽ ãžã®å±æ§ãšããŠå°éå
·ã«èŠã€ãããªããã€ã³ãã£ã³ã°ãèªåé©çšããããšããããã©ã«ãã®åäœãç¡å¹ã«ããŸãïŒé¢é£ããåé¡ïŒããã¯class
ããã³style
ãã€ã³ãã£ã³ã°ã«ã圱é¿ããŸããïŒïŒ
ã³ã³ããŒãã³ãã®å€éšãã€ã³ãã£ã³ã°ããå¿ ãããã«ãŒãã§ã¯ãªãå éšèŠçŽ ã«ãç¶æ¿ãããç°¡åãªæ¹æ³ãå ¬éããŸãã çæ³çã«ã¯ããã³ãã¬ãŒããšã¬ã³ããªã³ã°é¢æ°ã®éã®äžè²«æ§ããããŸãã
ia kie like vueãã·ã³ãã«ãªããŒã«
v2.4ã§ã®ãã®PRã¯çŽ æŽããããšèšãããã ãã§ãïŒ ð
ãªãªãŒã¹ããŒããã
ããããçµã¿åããããšã次ã®ãããªã³ã³ããŒãã³ãã次ã®ããã«åçŽåã§ããŸãã
<div>
<input v-bind="$attrs" v-on="$listeners">
</div>
ãããã®çš®é¡ã®ã³ã³ããŒãã³ãã¯v-modelã§åäœããããã«èšèšãããŠãããç§ãç¥ãéããã³ã³ããŒãã³ããã©ããããv-modelã¯ãã®ãŸãŸã§ã¯æ©èœããªããããè¯ãããã«èŠããŸãããããã¯å®å
šã«ã¯çå®ã§ã¯ãããŸããã ããšãã°ãã©ããã³ã°ã³ã³ããŒãã³ãããå
¥åã«vã¢ãã«ã転éããæ¹æ³ã®äŸã¯ãããŸããïŒ
ç§ãèŠã€ããæãç°¡åãªæ¹æ³ïŒ
https://jsfiddle.net/60xdxh0h/2/
ãã¶ãããã³ãã¬ãŒãã«æ²¿ã£ãŠæ©èœããã³ã³ããŒãã³ããæ©èœããŠãããšãããç°¡åã«ãªããŸã
ãããã®çš®é¡ã®ã³ã³ããŒãã³ãã¯v-modelã§åäœããããã«èšèšãããŠãããç§ãç¥ãéããã³ã³ããŒãã³ããã©ããããv-modelã¯ãã®ãŸãŸã§ã¯æ©èœããŸããã
ã©ãããŠãããªããšãèããã®ãïŒ v-modelã¯ããããããšã€ãã³ããªã¹ããŒã®åãªãã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒã§ãããã©ã¡ãã$ 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
æ©èœããŸããããã€ã³ããããå€ã¯DOMã®ã€ãã³ããªããžã§ã¯ãã§ãã ð
v-model
ãããã§æ©èœããããšãæãŸãããšããªãã¯æ£ãããšæããŸãããããã解決ããã®ã«æé©ãªå Žæãã©ãã«ãããã¯ããããŸããã ããã€ãã®ã¢ã€ãã¢ïŒ
ãã¶ããéå¯ç®ããããã£ãã«å ããããšãã§ãã$listeners
äŸãã°ïŒ __$listeners__: true
ãå©ããããã«ã v-on
ã®äœ¿çšãæ€åºv-on="$listeners"
次ã«äŸã§ã¯ã©ãã $listeners
ãªããžã§ã¯ããv-on
ã«æž¡ãããåãªã¹ããŒãã©ããã§ããŸãã
function (event) {
listener(event.target.value)
}
æ¬ ç¹ã®1ã€ã¯ãããŒã¿ãç Žæ£ããŠããããšã§ãã ããšãã°ã誰ããkeyCode
ã«ã¢ã¯ã»ã¹ãããå Žåã圌ãã¯éãæªãã§ãã ãã ãã v-on
ã®ãªããžã§ã¯ãæ§æã§ä¿®é£ŸåããµããŒããããŠããå Žåã¯ã .native
ã§èªåæãè¿ãåäœãç¡å¹ã«ããããšã§ããããä¿®æ£ã§ããŸãã
@ yyx990803 @LinusBorgå®çŸå¯èœæ§ã«ã€ããŠã©ãæããŸããïŒ ç§ãèŠéããŠãããšããžã±ãŒã¹ã¯ãããŸããïŒ
ãªãã»ã©ãããªãã¯rralã®vã¢ãã«ãåç §ããŠããŸãã ãã©ãŒã èŠçŽ ãç§ã¯ãããã³ã³ããŒãã³ãã§èããŠããŸããã
ãã®PRã®æç¡ã«ãããããããšã«ããå°éå ·ã§ããã䜿çšããããšã¯ã§ããŸãã/ãã¹ãã§ã¯ãããŸããã ãŸããé«åºŠãªã¢ããªã§ã¯ãããã䜿çšããããšã¯ããªããŸãã§ãïŒéæå¯èœã§ããïŒã
@LinusBorgåãããŒãžã«ããããšã確èªãããã ãã§ãã ãã®ãã³ãã¬ãŒãã§CustomInput
ã³ã³ããŒãã³ããäžããããå ŽåïŒ
<div>
<input v-bind="$attrs" v-on="$listeners">
<div>
以äžã®ã³ãŒããæ©èœãããšã¯æããªãã§ããããïŒ
<CustomInput v-model="myValue" />
ç§ã¯ãããæ©èœããããšãæåŸ ããŸã-ãããç§ãalexandreãç解ããæ¹æ³ã§ã¯ã圌ã¯ã³ã³ããŒãã³ãã§ã¯ãªãèŠçŽ ã®v-modelãåç §ããŠããŸãã-ããã¯æçµçã«ã¯ããŒã«ã«ç¶æ ã®å€æŽã§ã®ã¿æ©èœããŸãã
ç§ã¯@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>
ããã¯ã芪ã®ã¢ã€ãã ã«äœ¿çšãããªã¹ãã®1ã€ã®äŸã§ãã
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 /ã¬ã³ããªã³ã°é¢æ°ã§å®è³ªçã«åãããã«æ©èœãããšããè¿œå ã®å©ç¹ããããŸãã