ããã¯ã©ã€ãããã¥ã¡ã³ãã§ãã æçµæŽæ°æ¥ïŒ2016幎8æ17æ¥2.0.0-rc.2çŸåš
äžè¬çãªæ³šæäºé
æåŸã«ããã€ãã®ã¢ããã°ã¬ãŒãã®ãã³ãããã
æååãã³ãã¬ãŒãïŒ <script type="text/x-template">
ãã€ã³ã©ã€ã³JavaScriptæååããŸãã¯åäžãã¡ã€ã«ã³ã³ããŒãã³ããä»ããŠã³ã³ãã€ã«ãããŠããïŒã䜿çšããŠããéãããã³ãã¬ãŒãããŒãµãŒã¯DOMã«äŸåããªããªããŸãïŒå®éã®DOMããã³ãã¬ãŒããšããŠäœ¿çšããŠããå Žåãé€ãïŒã ïŒã 1.xã®ãã³ãã¬ãŒã解æå¶éã®å¯Ÿè±¡ã§ã¯ãªããªããŸããã ãã ããæ¢åã®ã³ã³ãã³ãããã³ãã¬ãŒããšããŠïŒ el
ãªãã·ã§ã³ã䜿çšããŠïŒèŠçŽ ã«ããŠã³ãããããšã«äŸåããŠããå Žåã§ãããããã®å¶éãé©çšãããŸãã
ã³ã³ãã€ã©ïŒãã³ãã¬ãŒãæååãã¬ã³ããªã³ã°é¢æ°ã«å€æããéšåïŒãšã©ã³ã¿ã€ã ãåé¢ã§ããããã«ãªããŸããã 2ã€ã®ç°ãªããã«ãããããŸãïŒ
vueify
ãŸãã¯vue-loader
ãå®è¡ãããŸãããã³ãã¬ãŒãã®äºåã³ã³ãã€ã«ã[x] Vue.config.silent
v-on
ã«ã¹ã¿ã ããŒãšã€ãªã¢ã¹ãæ§æããŸããVue.config.unsafeDelimitersã¯éæšå¥šã«ãªããŸãããv -htmlã䜿çšããŠãã ãã
[x] Vue.extend
el
ããŒã¿ã€ã³ããã¯ã¹ãèšå®ããŠã¢ã¯ã»ã¹ãã[x]æèš
[x] el
éæšå¥šã®çœ®æãã³ã³ããŒãã³ãã«ã¯ã«ãŒãèŠçŽ ã1ã€ã ãå«ãŸããŠããå¿
èŠã
[x] init beforeCreate
äžèšãšåãããã«ãåãé¢ãããéæšå¥š
[x]ãã£ã¬ã¯ãã£ã
elementDirectivesã¯éæšå¥šã«ãªããŸãã
[x]芪
ã€ãã³ãã®äŒæããªããªã£ããããã€ãã³ãã¯éæšå¥šã«ãªããŸãã
[x] vmã$ data
vmã$ logã¯éæšå¥šã«ãªããŸãããdevtoolsã䜿çšããŠãã ãã
[x] vmã$ on
äžèšãšåãããã«ã vmã$ broadcastã¯éæšå¥šã«ãªããŸãã
[x] vmã$ nextTick
vmã$ removeã¯éæšå¥šã«ãªããŸãã
[x] vmã$ mount
[x] vmã$ destroy
[x] v-ããã¹ã
{{{ }}}
çç¥åœ¢ã¯éæšå¥šã«ãªããŸãã(value, index) in arr
ã (value, key, index) in obj
$index
ããã³$key
Vue.config.keyCodes
代ããã«Vue.directive('on').keyCodes
Vue.config.keyCodes
ãä»ããŠå©çšã§ããããã«ãªããŸããïŒref
ãšããŠã®ç¹å¥ãªå±æ§ã«ãªããŸããv-elã¯éæšå¥šã«ãªããŸããïŒrefãšããŒãžãããŸããïŒ
[x] <component>
<transition>
<transition-group>
<keep-alive>
<slot>
éšåçã«éæšå¥š
[x]ããŒ
[x]ã¹ããã
[x] renderToString
v-for
å埩æ§æã®å€æŽ$index
ãš$key
å»æ¢
ãããã¯äž¡æ¹ãšãéæšå¥šã«ãªããããæ瀺çãªååä»ãã€ã³ããã¯ã¹ãšããŒãæ¡çšãããŠããŸãã ãã®æ§æã¯å°ãäžæè°ã§ããã¹ããããã«ãŒãã«å¶éããããŸãã ããŒãã¹ãšããŠãåå¿è ãåŠã¶ããã®æ§æã®ãã€ã³ãã2ã€å°ãªããªããŸãã
value in arr
(value, index) in arr
ïŒJavaScriptã®forEach
ããã³map
ãšã®äžè²«æ§ãé«ããããã«åŒæ°ã®é åºãåãæ¿ããŸããïŒvalue in obj
(value, key) in obj
ïŒåŒæ°ã®é åºãåãæ¿ããŸãããããã¯ãlodashãªã©ã®å€ãã®äžè¬çãªãªããžã§ã¯ãã€ãã¬ãŒã¿ãšã®äžè²«æ§ãé«ããããã§ãïŒ(value, key, index) in obj
ïŒã€ã³ããã¯ã¹ã¯ãããŒãã«ã¹ãã©ã€ãã³ã°ãªã©ã®èŠèŠçãªç®çã§ãªããžã§ã¯ãã®å埩ã§äœ¿çšã§ããããã«ãªããŸãïŒäžè¬ã«ã2.0ã§ã¯ããã£ã¬ã¯ãã£ãã®è²¬ä»»ç¯å²ãå€§å¹ ã«çž®å°ãããŠããŸããçŸåšããã£ã¬ã¯ãã£ãã¯ãäœã¬ãã«ã®çŽæ¥DOMæäœãé©çšããããã«ã®ã¿äœ¿çšãããŠããŸãã ã»ãšãã©ã®å Žåãã¡ã€ã³ã®ã³ãŒãåå©çšæœè±¡åãšããŠã³ã³ããŒãã³ãã䜿çšããããšããå§ãããŸãã
ãã£ã¬ã¯ãã£ãã«ã¯ã€ã³ã¹ã¿ã³ã¹ããªããªããŸãããããã¯ããã£ã¬ã¯ãã£ãããã¯å
ã«this
ãªããªãã bind
ã update
ãããã³unbind
ãã¹ãŠãåŒæ°ãšããŠåãåãããã«ãªã£ãããšãæå³ããŸãã
binding
ãªããžã§ã¯ãã¯äžå€ã§ããã binding.value
ãèšå®ããŠãå¹æã¯ãªããããã«è¿œå ãããããããã£ã¯ä¿æãããªãããšã«æ³šæããŠãã ããã ã©ãããŠãå¿
èŠãªå Žåã¯ã el
ãã£ã¬ã¯ãã£ãç¶æ
ãæ°žç¶åã§ããŸãã
<div v-example:arg.modifier="a.b"></div>
// example directive
export default {
bind (el, binding, vnode) {
// the binding object exposes value, oldValue, expression, arg and modifiers.
binding.expression // "a.b"
binding.arg // "arg"
binding.modifiers // { modifier: true }
// the context Vue instance can be accessed as vnode.context.
},
// update has a few changes, see below
update (el, binding, vnode, oldVnode) { ... },
// componentUpdated is a new hook that is called AFTER the entire component
// has completed the current update cycle. This means all the DOM would
// be in updated state when this hook is called. Also, this hook is always
// called regardless of whether this directive's value has changed or not.
componentUpdated (el, binding, vnode, oldVNode) { ... },
unbind (el, binding, vnode) { ... }
}
å€ã®ã¿ãæ°ã«ããå Žåã¯ãç Žå£ã䜿çšã§ããŸãã
export default {
bind (el, { value }) {
// ...
}
}
ããã«ã update
ããã¯ã«ã¯ããã€ãã®å€æŽããããŸãã
bind
åŸã«èªåçã«åŒã³åºãããããšã¯ãªããªããŸãããbinding.value === binding.oldValue
ãæ¯èŒããŠäžèŠãªæŽæ°ãã¹ãããã§ããŸãããããšãã°ããã£ã¬ã¯ãã£ãã眮ãæããããã®ã§ã¯ãªãå€æŽãããå¯èœæ§ã®ãããªããžã§ã¯ãã«ãã€ã³ããããŠããå Žåãªã©ãåžžã«æŽæ°ãé©çšãããå ŽåããããŸããelementDirective
ããã£ã¬ã¯ãã£ããã©ã¡ãŒã¿ãããã³acceptStatement
ã deep
ãªã©ã®ãã£ã¬ã¯ãã£ããªãã·ã§ã³ã¯ãã¹ãŠéæšå¥šã§ãã
Vue 2.0ã§ã¯ããã£ã«ã¿ãŒã·ã¹ãã ã«ããã€ãã®å€æŽããããŸãã
{{}}
ã¿ã°ïŒå
ã§ã®ã¿äœ¿çšã§ããããã«ãªããŸããã éå»ã«ã v-model
ã v-on
ãªã©ã®ãã£ã¬ã¯ãã£ãã§ãã£ã«ã¿ãŒã䜿çšãããšãå©äŸ¿æ§ãããè€éã«ãªãããšãããããŸããã v-for
ã§ã®ãªã¹ãã®ãã£ã«ã¿ãªã³ã°ã«ã¯ãããé©åã§ãããã®ããžãã¯ãèšç®ãããããããã£ãšããŠJavaScriptã«ç§»åããŸãã
{{ date | formatDate('YY-MM-DD') }}
é·ç§»CSSã¯ã©ã¹ã®å€æŽïŒ
åžžæãªã³ã®v-transition
ã¯ã©ã¹ã¯è¿œå ãããªããªããVueã¯AngularãšReactCSSTransitionGroupã䜿çšããã®ãšåãã¯ã©ã¹ã䜿çšããããã«ãªããŸããã
v-enter
ïŒèŠçŽ ãæ¿å
¥ãããåã«é©çšããã1ãã£ãã¯åŸã«åé€ãããŸãã ïŒEnterã®éå§ç¶æ
ïŒv-enter-active
ïŒèŠçŽ ãæ¿å
¥ãããåã«é©çšãããé·ç§»/ã¢ãã¡ãŒã·ã§ã³ãçµäºãããšåé€ãããŸãã ïŒã¢ã¯ãã£ã+ãšã³ã¿ãŒã®çµäºç¶æ
ïŒv-leave
ïŒäŒæã®ç§»è¡ãããªã¬ãŒããããšãã«é©çšããã1ãã£ãã¯åŸã«åé€ãããŸãïŒäŒæã®éå§ç¶æ
ïŒv-leave-active
ïŒè±éãã©ã³ãžã·ã§ã³ãããªã¬ãŒããããšãã«é©çšããããã©ã³ãžã·ã§ã³/ã¢ãã¡ãŒã·ã§ã³ãçµäºãããšãã«åé€ãããŸãã ïŒã¢ã¯ãã£ã+äŒæã®çµäºç¶æ
ïŒv-enter-active
ãšv-leave-active
ã䜿çšãããšããšã³ã¿ãŒ/ãªãŒããã©ã³ãžã·ã§ã³ã«ããŸããŸãªã€ãŒãžã³ã°ã«ãŒããæå®ã§ããŸãã ã»ãšãã©ã®å Žåãã¢ããã°ã¬ãŒããšã¯ãçŸåšã®v-leave
ãv-leave-active
眮ãæããããšãæå³ããŸãã ïŒCSSã¢ãã¡ãŒã·ã§ã³ã®å Žåã¯ã v-enter-active
+ v-leave-active
ïŒ
<transition>
ã³ã³ããŒãã³ã
ãã¹ãŠã®åäžèŠçŽ é·ç§»å¹æã¯ãã¿ãŒã²ããèŠçŽ /ã³ã³ããŒãã³ãã<transition>
çµã¿èŸŒã¿ã³ã³ããŒãã³ãã§ã©ããããããšã«ãã£ãŠé©çšãããããã«ãªããŸããã ããã¯æœè±¡ã³ã³ããŒãã³ãã§ããã€ãŸããäœåãªDOMèŠçŽ ãã¬ã³ããªã³ã°ããããæ€æ»ãããã³ã³ããŒãã³ãéå±€ã«è¡šç€ºããããããããšã¯ãããŸããã å
éšã®ã©ãããããã³ã³ãã³ãã«é·ç§»åäœãé©çšããã ãã§ãã
æãç°¡åãªäœ¿çšäŸïŒ
<transition>
<div v-if="ok">toggled content</div>
</transition>
ã³ã³ããŒãã³ãã¯ãå€ãé·ç§»å®çŸ©ãªãã·ã§ã³ã«çŽæ¥ãããããããã€ãã®å°éå ·ãšã€ãã³ããå®çŸ©ããŸãã
å°éå ·
é·ç§»CSSã¯ã©ã¹åãèªåçã«çæããããã«äœ¿çšãããŸãã ããšãã°ã name: 'fade'
ã¯èªåçã«.fade-enter
ã .fade-enter-active
ãªã©ã«å±éãããŸããããã©ã«ãã¯"v"
ã§ãã
åæã¬ã³ããªã³ã°ã§ãã©ã³ãžã·ã§ã³ãé©çšãããã©ããã ããã©ã«ãã¯false
ã§ãã
CSSé·ç§»ã¯ã©ã¹ãé©çšãããã©ããã ããã©ã«ãã¯true
ã§ãã false
ã«èšå®ãããšãã³ã³ããŒãã³ãã€ãã³ããä»ããŠç»é²ãããJavaScriptããã¯ã®ã¿ãããªã¬ãŒãããŸãã
é·ç§»çµäºã¿ã€ãã³ã°ã決å®ããããã«åŸ
æ©ããé·ç§»ã€ãã³ãã®ã¿ã€ããæå®ããŸãã 䜿çšå¯èœãªå€ã¯"transition"
ãš"animation"
ã§ãã ããã©ã«ãã§ã¯ãæéãé·ãã¿ã€ããèªåçã«æ€åºãããŸãã
ãã©ã³ãžã·ã§ã³ãåºã/å
¥ãã¿ã€ãã³ã°ã·ãŒã±ã³ã¹ãå¶åŸ¡ããŸãã 䜿çšå¯èœãªã¢ãŒãã¯"out-in"
ãš"in-out"
ã§ãã ããã©ã«ãã¯åæã§ãã
é·ç§»CSSã¯ã©ã¹ãåå¥ã«æ§æããŸãã
åçã³ã³ããŒãã³ãã«é·ç§»ãé©çšããäŸïŒ
<transition name="fade" mode="out-in" appear>
<component :is="view"></component>
</transition>
ã€ãã³ã
1.xAPIã§äœ¿çšå¯èœãªJavaScriptããã¯ã«å¯Ÿå¿ããŸãã
äŸïŒ
<transition @after-enter="transitionComplete">
<div v-show="ok">toggled content</div>
</transition>
å
¥åé·ç§»ãå®äºãããšãé·ç§»ããDOMèŠçŽ ãåŒæ°ãšããŠã³ã³ããŒãã³ãã®transitionComplete
ã¡ãœãããåŒã³åºãããŸãã
ããã€ãã®ã¡ã¢ïŒ
leave-cancelled
ã¯ãæ¿å
¥/åé€ã§ããªããªããŸããã äŒæã®ç§»è¡ãéå§ããããšããã£ã³ã»ã«ããããšã¯ã§ããŸããã ãã ãã v-show
ãã©ã³ãžã·ã§ã³ã§ã¯åŒãç¶ã䜿çšã§ããŸããenter
ããã³leave
ããã¯ã®å Žåã2çªç®ã®åŒæ°ãšããŠcb
ååšããããšã¯ããŠãŒã¶ãŒãé·ç§»ã®çµäºã¿ã€ãã³ã°ãæ瀺çã«å¶åŸ¡ããããšãæãã§ããããšã瀺ããŸãã<transition-group>
ã³ã³ããŒãã³ã
ãã¹ãŠã®è€æ°èŠçŽ ã®é·ç§»å¹æã¯ãèŠçŽ ã<transition-group>
çµã¿èŸŒã¿ã³ã³ããŒãã³ãã§ã©ããããããšã«ãã£ãŠé©çšãããããã«ãªããŸããã <transition>
ãšåãå°éå
·ãšã€ãã³ããå
¬éããŸãã éãã¯æ¬¡ã®ãšããã§ãã
<transition>
ãšã¯ç°ãªãã <transition-group>
ã¯å®éã®DOMèŠçŽ ãã¬ã³ããªã³ã°ããŸãã ããã©ã«ãã§ã¯<span>
ãã¬ã³ããªã³ã°ãã tag
ãããããä»ããŠã¬ã³ããªã³ã°ããèŠçŽ ãæ§æã§ããŸãã is
å±æ§ãšäžç·ã«äœ¿çšããããšãã§ããŸãïŒäŸïŒ <ul is="transition-group">
ã<transition-group>
ã¯mode
ããããããµããŒãããŠããŸããã<transition-group>
å
ã®ãã¹ãŠã®åã¯ãäžæã«ããŒèšå®ãããŠããå¿
èŠããããŸããäŸïŒ
<transition-group tag="ul" name="slide">
<li v-for="item in items" :key="item.id">
{{ item.text }}
</li>
</transition-group>
ãã©ã³ãžã·ã§ã³ã®ç§»å
<transition-group>
ã¯ãCSSå€æãä»ããé·ç§»ã®ç§»åããµããŒãããŸãã æŽæ°åŸã«ç»é¢äžã®åäŸã®äœçœ®ãå€æŽããããšã移åããCSSã¯ã©ã¹ãé©çšãããŸãïŒ name
ããããããèªåçæããããã moveClass
ããããã§æ§æãããŸãïŒã 移åã¯ã©ã¹ãé©çšããããšãã«CSS transform
ããããã£ããé·ç§»å¯èœãã§ããå ŽåãèŠçŽ ã¯FLIPææ³ã䜿çšããŠç®çå°ã«ã¹ã ãŒãºã«ã¢ãã¡ãŒã·ã§ã³åãããŸãã
ãã¡ãã®ã©ã€ããã¢ãã芧ãã ããã
åå©çšå¯èœãªãã©ã³ãžã·ã§ã³ã®äœæ
ãã©ã³ãžã·ã§ã³ãã³ã³ããŒãã³ããä»ããŠé©çšãããããã«ãªã£ãããããã©ã³ãžã·ã§ã³ã¯ã¢ã»ããã¿ã€ããšã¯èŠãªãããªããªã£ããããã°ããŒãã«Vue.transition()
ã¡ãœãããštransition
ãªãã·ã§ã³ã¯ã©ã¡ããéæšå¥šã«ãªããŸããã ã³ã³ããŒãã³ãã®å°éå
·ãšã€ãã³ãã䜿çšããŠãé·ç§»ãã€ã³ã©ã€ã³ã§æ§æã§ããŸãã ããããç¹ã«ã«ã¹ã¿ã JavaScriptããã¯ã䜿çšããŠãåå©çšå¯èœãªãã©ã³ãžã·ã§ã³ãšãã§ã¯ããäœæããã«ã¯ã©ãããã°ããã§ããããã çãã¯ãç¬èªã®é·ç§»ã³ã³ããŒãã³ããäœæããããšã§ãïŒãããã¯æ©èœã³ã³ããŒãã³ããšããŠç¹ã«é©ããŠããŸãïŒã
Vue.component('fade', {
functional: true,
render (createElement, { children }) {
const data = {
props: {
name: 'fade'
},
on: {
beforeEnter () { /* ... */ }, // <-- Note hooks use camelCase in JavaScript (same as 1.x)
afterEnter () { /* ... */ }
}
}
return createElement('transition', data, children)
}
})
ãã®åŸã次ã®ããã«äœ¿çšã§ããŸãã
<fade>
<div v-if="ok">toggled content</div>
</fade>
lazy
ããã³number
ãã©ã¡ãŒã¿ãŒã修食åã«ãªããŸããã
<input v-model.lazy="text">
.trim
-ååã瀺ãããã«ãå
¥åãããªãã³ã°ããŸããdebounce
ãã©ã¡ãŒã¿ã¯éæšå¥šã«ãªããŸããã ïŒäžéšã®ã¢ããã°ã¬ãŒãã®ãã³ããåç
§ããŠãã ããïŒv-model
ã¯ãæåã®ã€ã³ã©ã€ã³value
æ°ã«ããªããªããŸããã åžžã«Vueã€ã³ã¹ã¿ã³ã¹ããŒã¿ãä¿¡é Œã§ããæ
å ±æºãšããŠæ±ããŸãã ããã¯ã以äžã2ã§ã¯ãªã1ã®å€ã§ã¬ã³ããªã³ã°ãããããšãæå³ããŸãã
data: {
val: 1
}
<input v-model="val" value="2">
æ¢åã®ã³ã³ãã³ãã®<textarea>
ã«ã€ããŠãåãããšãèšããŸãã ãããã£ãŠã代ããã«ïŒ
<textarea v-model="val">hello world</textarea>
è¡ãïŒ
data () {
return {
val: 'hello world'
}
}
<textarea v-model="val"></textarea>
äž»ãªã¢ã€ãã¢ã¯ãJSåŽã¯ããã³ãã¬ãŒãã§ã¯ãªããä¿¡é Œã§ããæ å ±æºãšèŠãªãããã¹ãã§ãããšããããšã§ãã
v-model
ã¯ã v-for
å埩ããªããã£ãå€ã§äœ¿çšãããšæ©èœããªããªããŸããã
<input v-for="str in strings" v-model="str">
ããã¯JavaScriptã®ãããšåçã§ãããããæ©èœããŸããã
strings.map(function (str) {
return createElement('input', ...)
})
ã芧ã®ãšãããã€ãã¬ãŒã¿é¢æ°ã§str
ãå¥ã®å€ã«èšå®ããŠããé¢æ°ã¹ã³ãŒãå
ã®ããŒã«ã«å€æ°ã«ãããªããããäœãå®è¡ãããŸããã 代ããã«ããªããžã§ã¯ãã®é
åã䜿çšããŠã v-model
ããªããžã§ã¯ãã®ãã£ãŒã«ããæŽæ°ã§ããããã«ããå¿
èŠããããŸãã
<input v-for="obj in objects" v-model="obj.str">
.once
ãš.sync
ã¯éæšå¥šã«ãªããŸããã å°éå
·ã¯åžžã«äžæ¹åã«äžãã£ãŠããŸãã 芪ã¹ã³ãŒãã§å¯äœçšãçæããã«ã¯ãã³ã³ããŒãã³ãã¯æé»çãªãã€ã³ãã£ã³ã°ã«äŸåããã®ã§ã¯ãªããæ瀺çã«ã€ãã³ããçºè¡ããå¿
èŠããããŸãã
a
ã宣èšããŠãããã³ã³ããŒãã³ãã«this.a = someOtherValue
ãèšå®ããŸãã æ°ããã¬ã³ããªã³ã°ã¡ã«ããºã ã«ããã芪ã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ããããã³ã«ãåã³ã³ããŒãã³ãã®ããŒã«ã«å€æŽãäžæžããããŸãã äžè¬ã«ã2.0ã§ã¯ãå°éå
·ãäžå€ãšããŠæ±ãå¿
èŠããããŸãã ãããããå€æŽããã»ãšãã©ã®ãŠãŒã¹ã±ãŒã¹ã¯ãããŒã¿ããããã£ãŸãã¯èšç®ããããã£ã®ããããã«çœ®ãæããããšãã§ããŸããkeep-alive
ã¯ç¹å¥ãªå±æ§ã§ã¯ãªããªããŸããã <transition>
ãšåæ§ã«ãã©ãããŒã³ã³ããŒãã³ãã«ãªããŸããã
<keep-alive>
<component :is="view"></component>
</keep-alive>
ããã«ãããè€æ°ã®æ¡ä»¶ä»ãã®åã§keep-alive
ã䜿çšã§ããããã«ãªããŸãïŒåã¯æçµçã«åäžã®åã«è©äŸ¡ãããå¿
èŠãããããšã«æ³šæããŠãã ãããæåã®å以å€ã®åã¯ç¡èŠãããŸãïŒã
<keep-alive>
<comp-a v-if="a > 1"></comp-a>
<comp-b v-else></comp-b>
</keep-alive>
<transition>
ãšäžç·ã«äœ¿çšããå Žå
<transition>
<keep-alive>
<component :is="view"></component>
</keep-alive>
</transition>
<slot>
ãå«ããããšã¯ãµããŒããããªããªããŸããã ã¹ããããã¬ã³ããªã³ã°ããããšãã䜿ãæãããããåãã¬ã³ããªã³ã°ããªãŒã®ä»ã®å Žæã«ã¬ã³ããªã³ã°ããããšã¯ã§ããŸãããååä»ã<slot>
ãä»ããŠæ¿å
¥ãããã³ã³ãã³ãã¯ã slot
å±æ§ãä¿æããªããªããŸããã ã©ãããŒèŠçŽ ã䜿çšããŠã¹ã¿ã€ã«ãèšå®ããããé«åºŠãªãŠãŒã¹ã±ãŒã¹ã®å Žåã¯ãã¬ã³ããªã³ã°é¢æ°ã䜿çšããŠæ¿å
¥ãããã³ã³ãã³ããããã°ã©ã ã§å€æŽããŸãã
v-ref
ã¯ãã£ã¬ã¯ãã£ãã§ã¯ãªããªããŸããïŒ key
ãtransition
䌌ãç¹å¥ãªå±æ§ã«ãªããŸããïŒ
<!-- before -->
<comp v-ref:foo></comp>
<!-- after -->
<comp ref="foo"></comp>
åçåç §ãã€ã³ãã£ã³ã°ããµããŒããããããã«ãªããŸããã
<comp :ref="dynamicRef"></comp>
vm.$els
ãšvm.$refs
ãããŒãžãããŸãã éåžžã®èŠçŽ ã§äœ¿çšãããå Žåãrefã¯DOMèŠçŽ ã«ãªããã³ã³ããŒãã³ãã§äœ¿çšãããå Žåãrefã¯ã³ã³ããŒãã³ãã€ã³ã¹ã¿ã³ã¹ã«ãªããŸããvm.$refs
ã¯ãã¬ã³ããªã³ã°ããã»ã¹èªäœã®éã«ç»é²/æŽæ°ãããããããªã¢ã¯ãã£ãã§ã¯ãªããªããŸããã ãããããªã¢ã¯ãã£ãã«ããã«ã¯ãå€æŽããšã«éè€ããã¬ã³ããªã³ã°ãå¿
èŠã«ãªããŸãã
äžæ¹ã $refs
ã¯ãäž»ã«JavaScriptã§ã®ããã°ã©ã ã«ããã¢ã¯ã»ã¹çšã«èšèšãããŠããŸããã€ã³ã¹ã¿ã³ã¹èªäœã«å±ããŠããªãç¶æ
ãåç
§ããå¿
èŠãããããããã³ãã¬ãŒãã§$refs
ã«äŸåããããšã¯ãå§ãããŸããã
track-by
ã¯key
眮ãæããããŸããã ããã¯ãå±æ§ããã€ã³ãããããã®åãã«ãŒã«ã«åŸããŸãã v-bind:
ãŸãã¯:
ãã¬ãã£ãã¯ã¹ããªãå Žåããªãã©ã«æååãšããŠæ±ãã
<!-- 1.x -->
<div v-for="item in items" track-by="id">
<!-- 2.0 -->
<div v-for="item in items" :key="item.id">
å±æ§å ã®è£éã¯éæšå¥šã«ãªããŸããïŒ
<!-- 1.x -->
<div id="{{ id }}">
<!-- 2.0 -->
<div :id="id">
å±æ§ãã€ã³ãã£ã³ã°ã®åäœã®å€æŽïŒå±æ§ããã€ã³ãã£ã³ã°ãããšãã«ã null
ã undefined
ãããã³false
ã®ã¿ãåœç©ãšèŠãªãããŸãã ããã¯ã 0
ãšç©ºã®æååããã®ãŸãŸã¬ã³ããªã³ã°ãããããšãæå³ããŸãã åæãããå±æ§ã®å Žåã ããã¯ã :draggable="''"
ãdraggable="true"
ãšããŠã¬ã³ããªã³ã°ãããããšãæå³ããŸãã
ãŸããåæãããå±æ§ã®å Žåãäžèšã®åœã®å€ã«å ããŠããfalseãã®æååå€ãattr = "false"ãšããŠã¬ã³ããªã³ã°ãããŸãã
v-on
ã¯ããã®ã³ã³ããŒãã³ãã«ãã£ãŠçºè¡ãããã«ã¹ã¿ã ã€ãã³ãã®ã¿ããªãã¹ã³ããããã«ãªããŸããã ïŒDOMã€ãã³ãããªãã¹ã³ããªããªããŸããïŒv-else
ã¯v-show
ã§ã¯æ©èœããªããªããŸãã-åŠå®åŒã䜿çšããã ãã§ãã{{* foo }}
ïŒã¯éæšå¥šã«ãªããŸãã-代ããã«v-once
䜿çšããŠãã ããã:style
ã¯ã€ã³ã©ã€ã³!important
ãµããŒãããªããªããŸããpropsData
䜿çšããŠãã ããïŒel
ãªãã·ã§ã³ã¯Vue.extend
䜿çšã§ããªããªããŸããã ããã¯ãã€ã³ã¹ã¿ã³ã¹äœæãªãã·ã§ã³ãšããŠã®ã¿äœ¿çšã§ããããã«ãªããŸãããVue.set
ãšVue.delete
ã¯Vueã€ã³ã¹ã¿ã³ã¹ã§ã¯æ©èœããŸããã data
ãªãã·ã§ã³ã§ããã¹ãŠã®ãããã¬ãã«ã®ãªã¢ã¯ãã£ãããããã£ãé©åã«å®£èšããããšãå¿
é ã«ãªããŸããã$data
ã眮ãæããããšãçŠæ¢ãããŠããŸãã ããã«ãããåå¿åºŠã·ã¹ãã ã®äžéšã®ãšããžã±ãŒã¹ãé²æ¢ãããã³ã³ããŒãã³ãã®ç¶æ
ãããäºæž¬å¯èœã«ãªããŸãïŒç¹ã«ã¿ã€ããã§ãã¯ã·ã¹ãã ã®å ŽåïŒãvm.$watch
ãä»ããŠäœæããããŠãŒã¶ãŒãŠã©ããã£ãŒã¯ãé¢é£ããã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ãããåã«èµ·åãããããã«ãªããŸããã ããã«ããããŠãŒã¶ãŒã¯ã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ããåã«ä»ã®ç¶æ
ãããã«æŽæ°ã§ãããããäžèŠãªæŽæ°ãåé¿ã§ããŸãã ããšãã°ãã³ã³ããŒãã³ãã®å°éå
·ãç£èŠããå°éå
·ãå€æŽããããšãã«ã³ã³ããŒãã³ãèªäœã®ããŒã¿ãæŽæ°ã§ããŸãã
ã³ã³ããŒãã³ãã®æŽæ°åŸã«DOMã§äœããè¡ãã«ã¯ãæŽæ°ãããã©ã€ããµã€ã¯ã«ããã¯ã䜿çšããã ãã§ãã
$dispatch
ãš$broadcast
æšå¥šã«å¯ŸåŠããæ¹æ³$dispatch
ãš$broadcast
ãå»æ¢ããçç±ã¯ãã³ã³ããŒãã³ãããªãŒã®æ§é ã«äŸåããã€ãã³ããããŒã¯ãã³ã³ããŒãã³ãããªãŒã倧ãããªãææã«ã€ããŠæšè«ããã®ãé£ããå Žåãããããã§ãïŒç°¡åã«èšãã°ãããã§ã¯ãããŸããïŒã倧èŠæš¡ãªã¢ããªã§ã¯é©åã«æ¡åŒµã§ããåŸã§èŠçãæããããã«èšå®ããããããŸããïŒã $dispatch
ãš$broadcast
ããå
åŒã³ã³ããŒãã³ãéã®éä¿¡ã解決ããŸããã 代ããã«ã Node.jsã®
var bus = new Vue()
// in component A's method
bus.$emit('id-selected', 1)
// in component B's created hook
bus.$on('id-selected', this.someMethod)
ãŸãã$ offã䜿çšããŠã€ãã³ãã®ãã€ã³ãã解é€ããããšãå¿ããªãã§ãã ããã
// in component B's destroyed hook
bus.$off('id-selected', this.someMethod)
ãã®ãã¿ãŒã³ã¯ãåçŽãªã·ããªãªã§ã¯$dispatch
ãš$broadcast
代ããã«äœ¿çšã§ããŸãã ãã ããããè€éãªã±ãŒã¹ã§ã¯ã Vuexã䜿çšããŠå°çšã®ç¶æ
管çã¬ã€ã€ãŒãå°å
¥ããããšããå§ãããŸãã
v-for
ïŒãã£ã«ã¿ãŒã®ããäžè¬çãªäœ¿çšæ³ã®1ã€ïŒã䜿çšãããªã¹ããã£ã«ã¿ãªã³ã°ã®å Žåãå
ã®é
åã®åŠçæžã¿ã³ããŒãè¿ãèšç®ããããã£ã䜿çšããããšããå§ãããŸãïŒæŽæ°ãããããŒã¿ã°ãªããã®äŸãåç
§ïŒã å©ç¹ã¯ãä»»æã®ãã£ã«ã¿ãŒæ§æ/ APIã«ããå¶éããªããªãããšã§ããããã¯åãªãJavaScriptã§ãããèšç®ãããããããã£ã§ããããããã£ã«ã¿ãŒåŠçãããçµæã«èªç¶ã«ã¢ã¯ã»ã¹ã§ããŸãã
ãã®ãã£ã¹ã«ãã·ã§ã³ã¹ã¬ãããåç §ããŠãã ããã
v-model
ã®debounce
ã®éæšå¥šã«å¯ŸåŠããæ¹æ³v-model
ïŒãããŠã³ã¹ã¯ãAjaxãªã¯ãšã¹ãããã®ä»ã®ã³ã¹ãã®ãããæäœãå®è¡ããé »åºŠãå¶éããããã«äœ¿çšãããŸãã v-model
ã«å¯ŸããVueã®debounce
å±æ§ãã©ã¡ãŒã¿ãŒã¯ãããç°¡åã«ããŸãããå¶éã䌎ãé«äŸ¡ãªæäœèªäœã§ã¯ãªãã_ç¶æ
ã®æŽæ°_ããããŠã³ã¹ããŸãã
ãããã®å¶éã¯ãæ€çŽ¢ã€ã³ãžã±ãŒã¿ãŒãèšèšãããšãã«æããã«ãªããŸãã ãã®äŸãèŠãŠãã ããã debounce
å±æ§ã䜿çšãããšãå
¥åã®ãªã¢ã«ã¿ã€ã ç¶æ
ã«ã¢ã¯ã»ã¹ã§ããªããªããããæ€çŽ¢ãéå§ããåã«ããŒãã£å
¥åãæ€åºããæ¹æ³ã¯ãããŸããã ãããŠã³ã¹æ©èœãVueããåãé¢ãããšã§ãå¶éãããæäœã®ã¿ããããŠã³ã¹ããããšãã§ããŸãã
ãããŠã³ã¹ãé©åãªã©ãããŒé¢æ°ã§ã¯ãªãå ŽåããããŸãã æ€çŽ¢åè£ã®APIããããããéåžžã«äžè¬çãªäŸã§ã¯ããŠãŒã¶ãŒãå
¥åãåæ¢ãããŸã§ææ¡ãæäŸããã®ãåŸ
ã€ããšã¯çæ³çãªãšã¯ã¹ããªãšã³ã¹ã§ã¯ãããŸããã 代ããã«ããããå¿
èŠãªã®ã¯ãã¹ãããã«æ©èœã§ãã ãã§ã«debounce
ã§lodashã®ãããªãŠãŒãã£ãªãã£ã©ã€ãã©ãªã䜿çšããŠããã®ã§ã代ããã«throttle
ã䜿çšããããã«ãªãã¡ã¯ã¿ãªã³ã°ããã®ã«æ°ç§ããããããŸããïŒ
ç¹å®ã®æ©èœãã¹ã¿ã³ãã¢ãã³ãã«ãã§ã®ã¿å©çšå¯èœã«ãªãããšã確èªããŸããã ããã¯ããããšNPMããŒãžã§ã³ãå€§å¹ ã«ç°ãªãããšãæå³ããŸããïŒ
@rekateka 2.0ã¹ã¿ã³ãã¢ãã³ãã«ããšã¯ïŒã³ã³ãã€ã©+ã©ã³ã¿ã€ã ïŒãæå³ããŸãã NPMããã±ãŒãžã®ããã©ã«ãã®ãšã¯ã¹ããŒãã¯ã©ã³ã¿ã€ã ã®ã¿ã§ããããã¯ãNPMããã€ã³ã¹ããŒã«ããå Žåããã«ãããŒã«ã䜿çšããŠãã³ãã¬ãŒããããªã³ã³ãã€ã«ããå¯èœæ§ãé«ãããã§ãã
ããããšãã@ yyx990803ã ã³ã³ãã€ã©ããã®ä»ã®æ©èœã«é¢ããŠããŸã ããã€ã質åããããŸããããã®ããã«ãã©ãŒã©ã ã䜿çšããŸããã
äžãäžã¬ãã¥ãŒããå¿ èŠã®ããããã¥ã¡ã³ãã«æ°ã«ãªãå€æŽãå ããããŠããŸããïŒ ãããä»äºïŒ ç·ãç¶æããŸãã ããªãã¯ãŠã§ãéçºãåå®çŸ©ããŠããŸãã ããããšãïŒ
ãã£ã¬ã¯ãã£ãã®this.arg
ãååŸã§ããŸããïŒ
vnode.data.directives
ã¯arg
ãããŸããã2ã€ä»¥äžã®ãã£ã¬ã¯ãã£ããããå Žåã index
ç¥ãããšãã§ããŸããã
<!-- show @ 0, img @ 1-->
<img v-show="true" v-img:200*200="imgSrc">
<!-- img @ 0, show @ 1-->
<img v-img:200*200="imgSrc" v-show="true">
forEach
ã䜿çšããå¿
èŠããããŸããïŒ ããããšãïŒ
@banrichoè¯ãç¹ãããã¯èŠèœãšãããŠããŸãïŒ æŽæ°ããããã£ã¬ã¯ãã£ãé¢æ°ã®ã·ã°ããã£ãåç §ããŠãã ããã
ãŸã第äžã«ãç³ãèš³ãããŸããããããã§ãã®åé¡ãå°ããããšãã§ãããã©ããã¯ããããããŸãããå°ãèŠä»¶ããããŸãã
èŠä»¶ã¯ãã³ã³ããŒãã³ãã®äœ¿çšæ³ããã®ããã«èšèšã§ããããšãé¡ã£ãŠããŸã
<carousel>
<img src="..." alt="..." desc="..." is="argument">
<img src="..." alt="..." desc="..." is="argument">
</carousel>
ç§ã¯åäŸãã¡ãå±æ§ã®å¶éã ãã§ãªããããçš®ã®è°è«ã®ããã«ãªãããšãé¡ã£ãŠããŸã
ä»ã®ãšããç§ã¯ã³ã³ããŒãã³ããäœãããšãã§ããŸãã䜿çšæ³ã¯æ¬¡ã®ããã«
<carousel items="[{}, {}, {}]"></carousel>
ããããããã¯ããŸãè¯ããªããšæããŸããReactã®ã«ããŒãããŒã§ä»¥åã«äœæãããã®ã奜ãã«ãªãããšãé¡ã£ãŠããŸã
@ andyyou-ãã®è³ªåã¯ãåé¡ã§ããæ確ãªææ¡ã§ãããã®åé¡ã«å¯Ÿããå®éã®å©ãã§ããªãã®ã§ããããããã©ãŒã©ã ã«æçš¿ããã®ãæé©ã§ãã
ãã©ãŒã©ã ã¹ã¬ããã§Vueã䜿çšããŠèŠä»¶ãæºãããªãããšãããã£ãå Žåã¯ãããã§æ°ããåé¡ãéãããšãã§ããŸãã
ã¹ã³ãã
@smolinariããããšã
ãããããããè€éãªã±ãŒã¹ã§ã¯ãVuexã䜿çšããŠå°çšã®ç¶æ 管çã¬ã€ã€ãŒãå°å ¥ããããšããå§ãããŸããã ããã¯ãç¶æ ãã€ãã³ãã«å¯ŸããŠäœ¿çšããå¿ èŠãããããšãæå³ããŠããããã§ãã ç§ã¯ããããå®å šã«åé¢ããŠãããšèŠãŠããŸã-ã€ãã³ãã¯ç¬éã§ãããç¶æ ã¯å€åããŸããã ç¶æ ãèŠãããšãã§ãããšèšããŸãããããã¯ç¹å®ã®ç¬éãäŒãããã®ã§ã¯ãªããäœããå€ãããšãã¯ãã€ã§ãäŒããŸãã ãã®æšå¥šäºé ã®èåŸã«ããæå³ã«èå³ããããŸãã
@jrentonäžè¬ã«ãã€ãã³ãã·ã¹ãã ã¯ãåã«ã³ã³ããŒãã³ãAãã³ã³ããŒãã³ãBã«ç¶æ
ãå€æŽããããã«æ瀺ããããŸãã¯AãBã«äœãä»ã®ããšãããããã«æ瀺ãããã®ãšèŠãªãããšãã§ããŸãã
ãããã£ãŠãæåã®ã±ãŒã¹ã§ã¯ãã€ãã³ãã·ã¹ãã ã䜿çšããŠAãBã«ç¶æ
ãå€æŽããããã«æ瀺ãã代ããã«ãç¶æ
管çïŒAãšBã®å
±æç¶æ
ã管çããïŒã䜿çšã§ããŸãã
2çªç®ã®ã±ãŒã¹ã§ã¯ããã€ãã³ããã¹ãã¢ãããŒãã§ããªãããŸãåŠçã§ãããšæããŸãã
äºãã«è©±ãåãã³ã³ããŒãã³ãã®ã¹ãŒãã®ä»£ããã«@jrentonã¯ãã³ã³ããŒãã³ããã¢ã¯ã·ã§ã³ã§ãæå³ããè¡šçŸããçªç¶å€ç°ã§ãäºå®ããèšé²ããããã®åäžã®ãã£ãã«ãææ¡ããŸãã
ç§ã¯Vueãšäžç·ã«Twigã䜿çšããŠããŸãã
ãããŸã§ïŒvue 1.0ïŒã次ã®ããã«ããŒã¿ãã³ã³ããŒãã³ãã«æž¡ããŠããŸããã
<my-component data="{{ DATA }}"><my-component>
ïŒ {{
ãš}}
ã¯å°æã¿ã°ã§ããããšã«æ³šæããŠãã ãã-vueã®å Žåãã«ã¹ã¿ã åºåãæå${
ãš}
ïŒ
ç§ãç©äºãæ£ããç解ããŠããå ŽåãVue2.0ã§ã¯æ¬¡ã®ããã«ããå¿ èŠããããŸãã
<my-component :data=" '{{ DATA }}' "></my-component>
æ£ããïŒ
@ghololããããããã¯ãã ã§ã
<my-component :data="{{ DATA }}"></my-component>
å®éãããªãã®å€ã䜿ãæ¹ã¯ããããããŸããããªãããã§ãã
ãŸãããã¯ããŸããããŸãã...
ç§ãèšã£ãããã«ãããŒã¿ã¯å°æãã³ãã¬ãŒããšã³ãžã³ããæ¥ãŠããŸãã çŸåšãVue2.0ã§ã¯æ©èœããŸããã ç§ã¯ããªããèšã£ãããã«ïŒåäžã®ã¢ãã¹ãããã£ãªãã§ïŒãããæž¡ãããšããŸããããããŒã¿ããããã£ã¯æªå®çŸ©ã«ãªããŸãã
ãšã©ãŒïŒSyntaxErrorïŒããããã£ãªã¹ãã®åŸã«}ããããŸãã
ç·šéïŒããã¯åäœããŸããDATAå€æ°ãæååã§ããããšãèšåããã®ãå¿ããŸãã
@jrentonç§ã®èããšåæ©ã¯éåžžã«åçŽã§ãtemplate
ãéžã¶ããšãã§ããŸãã
slim
ãããªãã³ãã¬ãŒãèšèªã§ã¯ãå±æ§ãå°ãå€ãå Žåãå±æ§ã®ååãéåžžã«é·ããšèšãå Žåã¯ãåèŠçŽ ã®æ§æããã©ã¡ãŒã¿ãŒïŒåŒæ°ïŒãšããŠèŠªã«æž¡ãããšãã§ãããšããã®ã§ããã 1è¡ã«ãã¹ãŠã®ãã®ã 80æåãè¶
ãã1è¡ã®ã³ãŒããäœæããæ¹ãç°¡åã§ãã
@ yyx990803ä»æ¥ã®åéºå¿ã¯ã1.0ãã2.0aã«ç§»è¡ããã®ã«ã©ãã ãã®åŽåããããããç¥ããããšæã£ãŠããŸãããæ®å¿µãªãããåçŽãªè£éã䜿çšã§ããªããªã£ãããã <input type="text" name="account[categories][{{ category.id }}]">
ãããªåçŽãªåŠçãè¡ãã«ã¯ã©ãããã°ããã§ããããã 2.0ïŒ
ES6ã€ã³ã©ã€ã³ãã³ãã¬ãŒãã¯ããã€ã³ãã£ã³ã°åŒã§æ©èœããŸãã
<input type="text" :name="`account[categories][${ category.id }]`">
ããã2.0ã§æ©èœããå¯äžã®æ¹æ³ã§ããå Žåã¯ã1.0ãæ £ã芪ããã çŽ æµãªæ§æã®ãªã°ã¬ãã·ã§ã³ã ãšèšã£ãŠãããŸããŸãããã¯ããããã¯ES2015ã ãã§ãã
ããã©ãŒãã³ã¹äžã®çç±ã§è£éãåé€ããããšæããŸããïŒ ç§ã¯ãããéãæ§æã®äŸ¡å€ãããããšãé¡ã£ãŠããŸãã
@oskarkrawczyk DOMã§name="account[categories][fruits]"
ãããªãã®ã«ãªããããšæããŸããããã¯ãåŒãã¬ã³ããªã³ã°ãããã®ã ããã§ãã
2.0ããŒãžã§ã³ïŒããã³å®éã«ã¯é©åãª1.0ïŒã¯:name=" 'account[categories][' + category.id + ']' "
ãŸãã
@simplesmilerããããŸããã {{ }}
ç§ãå°ãçãããããšæããŸãã
@ yyx990803ãã®ããã«ã³ã³ããŒãã³ããåçã«æ¿å ¥ã§ããŸããïŒ
render () {
return this.$createElement('div', { staticClass: 'list-container' }, this.list)
},
data () {
return {
list: []
}
},
method: {
a () {
this.list.push(this.$createElement('myComponent', {}))
}
}
åŒã«äŸåããå±æ§ã®ããã€ãã®å€ããã€ã³ãããã«ã¯ã©ãããã°ããã§ããïŒ äŸãã°ïŒ
new Vue({
el:'body',
data:{
flag: true
}
})
<input type="text" v-bind:placeholder="{test: flag, test2: !flag}" />
次ã®çµæãæåŸ ããŠããŸãïŒ
<input type="text" placeholder="test" />
<!-- or -->
<input type="text" placeholder="test2" />
@nervghããã¯ãã®è³ªåãããã®ã«é©åãªå Žæã§ã¯ãããŸããã
äžé
åŒv-bind:placeholder="flag ? 'test' : 'test2'"
ãŸãã
@simplesmiler ãããªãã®çãã«æè¬ããŸãã _Object-Syntax_ã¯ãããã®å Žåã«åœ¹ç«ã€ãšèšãããã®ã§ãããæåŸ ã©ããã«æ©èœããŸããã
@nervghãªããžã§ã¯ãã®æ§æã¯ãæååã®ãªã¹ããåãåãå±æ§ã«ã®ã¿é©çšã§ããŸãã ãã€ãã£ãå±æ§ã®ãã¡ããã®ãããªå±æ§ã¯class
ã§ãããã³ã³ããŒãã³ãã®å Žåãæååã®ãªã¹ããéä¿¡ããã®ããé©åãªãªããžã§ã¯ããéä¿¡ããã®ããååŽããæ€åºããæ¹æ³ã¯ãããŸããã
ReïŒ .once
ãš.sync
ã¯éæšå¥šã«ãªããŸããã
ããã¯æ¬åœã«äžè¬çãªãã¶ã€ã³ãã¿ãŒã³ãå£ããŸãããïŒ
ãããããªããšããã©ãŒã ãã£ãŒã«ããåŠçããããã®åçŽãªã³ã³ããŒãã³ããã©ã®ããã«äœæã§ãããèããããŸããã
ããŸããŸãªãã©ãŒã ãã£ãŒã«ãã¿ã€ãçšã®åçŽãªã³ã³ããŒãã³ãããããŸããããšãã°ããããã¹ãããã¯ã¹ãã³ã³ããŒãã³ããã³ãã¬ãŒãã¯æ¬¡ã®ãšããã§ãã
<label>{{type.caption}}:<input type="text" v-model="data"></label>
...ãŸããããŒã¿æ§é å ã®é åã«èŠçŽ ãè¿œå ããã³åé€ããããã®UIãæäŸãããªã¹ãçšã®ããè€éãªã³ã³ããŒãã³ã
次ã«ããããã®ã³ã³ããŒãã³ãã次ã®ããã«äœ¿çšããŸãã
<div v-for="field in type.fields">
<component :data.sync="data[field.name]" :is="field.ctype" :type="field">
泚ïŒãããã®ã³ã³ããŒãã³ãã«ã¯ãã¹ãŠã data
ãštype
2ã€ã®å°éå
·ããããŸãã data
ã¯ãã³ã³ããŒãã³ããç·šéçšã®UIãæäŸãããç·šéäžã®ããŒã¿æ§é å
ã®ããŒãã§ããã type
ã¯ãã¿ã€ããå«ãïŒå€§èŠæš¡ã§éçãªïŒããŒã¿æ§é å
ã®ããŒãã§ãã / fieldséå±€ã
.sync
ãªãã§ãã®ãããªãã®ã¯ã©ã®ããã«æ©èœããŸããïŒ
ãããã®ã³ã³ããŒãã³ãéã«ããçš®ã®ã¡ãã»ãŒãžã³ã°ã·ã¹ãã ãäœæãããšããµãã³ã³ããŒãã³ããã©ã®ãµãã³ã³ããŒãã³ãã§ãããã芪ãšäœããã®åœ¢ã§éä¿¡ã§ãã芪ãããŒã¿ã®ã©ã®éšåãææ¡ã§ããããéåžžã«è€éã«ãªãããã«æãããŸããå€æŽããæ§é ã
ã³ã³ããŒãã³ãã䜿çšããŠããŒã¿æ§é ã®äžéšã®ãšãã£ã¿ãŒãäœæããããšã¯ã¢ã³ããã¿ãŒã³ã§ãããšãã£ããã£ãŠããããã«èŠããã®ã§ãäœãã足ããªãããšãå¿ããé¡ã£ãŠããŸãã ããïŒ ãããŸã§ã®ãšãããVueã䜿çšããã®ã¯ããã ãã§ãã ãã®æ©èœãåé€ãããšãããã¯ãªãŒã³ãªã³ãŒããæžãããã«ãªããšæããŸãã ãã¶ãããã¯äœäººãã®äººã ã«ãã®åœ±é¿ãäžããã§ãããããããå€ãã®äººã ã¯ãã®å¶éãåé¿ããããã«ãã£ãšåä»ãªã³ãŒããæžãã§ãããã ç¶æ ã®å€æŽã¯ãã³ã³ãã¥ãŒã¿ãŒãè¡ãå¯äžã®äŸ¿å©ãªããšã§ãã ããããã£ãšç°¡åã«ããŠãã ããã
2.0ã®@JasonWoof v-model
ã¯ãã«ã¹ã¿ã ã³ã³ããŒãã³ãã§æ©èœããŸãã ã³ã³ããŒãã³ãã¯åã«æ¬¡ã®ããšãè¡ãå¿
èŠããããŸãã
value
ãšããååã®å°éå
·ãå
¬éããinput
ã€ãã³ããçºè¡ããŸãïŒäŸïŒ this.$emit('input', value)
äŸãåç §ããŠãã ããã
@ yyx990803説æãšãªã³ã¯ãããããšãã ä»ç§ã¯ç«ã¡åŸçããŠããŸãïŒ
ãªã.sync
åé€ããã®ã§ããïŒ
ã¡ãªããã¯ããããŸãããããã¡ãªããã ããããããŸãã ãªã³ã¯ããäŸã¯ã :selected.sync
ãŸãã¯v-model
ããããã§åãããšãéæã§ããããšã瀺ããŠããŸãã v-modelã¡ãœããã®æ¬ ç¹ã ããããããŸãã
.sync
å°éå
·ãæã€ããšãã§ããŸãv-modelã«åãæ¿ãããšãã©ã®ããã«ãã£ãããããã®ã«ãªãã®ãããããŸããã ã©ã¡ãã®å Žåããåã³ã³ããŒãã³ãã芪ã®ç¶æ
ãç°¡åã«å€æŽã§ããããšã瀺ã芪ã®å¯äžã®ææšã¯ããã³ãã¬ãŒãã®å°éå
·ã®æ§æã§ãã .sync
æ¹ãæ確ã ãšç§ã¯äž»åŒµããŸãã
ãã1ã€ã¯ããªããžã§ã¯ã/é
åãªã©ãå°éå
·ãšããŠæž¡ããšããããã¯åã³ã³ããŒãã³ãããå€æŽå¯èœã«ãªããšããããšã§ãã ãããã£ãŠããã®å Žåãããã°ã©ããŒãåã³ã³ããŒãã³ãããç¶æ
ãå€æŽã§ããªãããã«ããããšã¯ã§ããŸããïŒããã¯éåžžã«äžè¬çã ãšæããŸãïŒããããã£ãŠãé害ãåŒãèµ·ãããã®ãåé€ããŠãã€ãŸãããå°å
¥ããŠããããã«èŠããŸããæååå€ã®åãæž¡ãã¯ããªããžã§ã¯ãå€ã®åãæž¡ããšåãããã«æ©èœããŸãã .sync
ã¯ãããŒã¿åã«é¢ä¿ãªããåžžã«ååŽãããããŒã¿ããããããæžã蟌ã¿å¯èœã«ããããšã§ãã³ãŒããããã·ã³ãã«ã§äžè²«æ§ã®ãããã®ã«ããŸãã
ç§ã¯Vue.jsãåããŠäœ¿çšããŸããïŒ3æ¥åïŒããããŸã§ã®ãšãããVue.jsã¯äž»ã«æ¬¡ã®2ã€ã®çç±ã§äŸ¡å€ããããŸãã
å°ãªããšãããã¯ç§ããããŸã§ã«çºèŠããããšã§ãã
.sync
ãåé€ãããšãVue.jsã«2çªç®ã®åŠçãäžè²«ããŠå®è¡ãããããšãé£ãããªãããã«æãããŸãã
@JasonWoofã¯ãã³ã³ããŒãã³ãèªäœã®ç¯å²å€ã®æ瀺çãªå¯äœçšãšæé»çãªå¯äœçšããé·æçãªä¿å®æ§ã«ãã¹ãŠã®éããããããããã§ãã
...ãããŠã人ã
ã¯.sync
䜿çšããªãå Žåãåã«åŠã¶ã¹ãã§ãããšäž»åŒµããããšãã§ããŸããããããŸã§ã®çµéšã¯ç°ãªããŸãã 人ã
ã¯ããã«é床ã«äŸåããåŸã§ã»ãšãã©ãããã°ã§ããªãã³ãŒããäœæããåŸåããããŸãã
ãããã£ãŠãããã¯äººã ã«æåããããã匷å¶ãããšããèšèšäžã®æ±ºå®ã§ãã
äŸïŒ
name
ãåæããŸãã ãã¹ãŠã¯é 調ã§ããwatch
é¢æ°ãäœæããŸãã è¯ãïŒconsole.log()
ã©ãã«ãé
眮ã§ããªããããçç±ã¯ããããŸãããwatch
é¢æ°ã§ãããã®ã·ããªãªãäœããã®æ¹æ³ã§åºå¥ããæ¹æ³ãèŠã€ããããšããŸãã...ãããŠãè€æ°ã®ã¬ãã«ã®æ·±ãã§åæãããšãããã¯ããã«ã¯ã¬ã€ãžãŒã«ãªããŸãã
ããã¯ããã©ãŒã©ã ãéè«ã§äœåºŠãèŠãïŒã¢ã³ãïŒãã¿ãŒã³ã§ãã
.sync
åé€ãããšãã»ãšãã©ã®å Žåãã³ãŒãã.sync
ã«å¯ŸããŠååã«åçŽãªãŸãŸã§ã¯ãªããªããããæåããæ確ã§ãããããããä¿å®ããããã³ãŒããäœæããå¿
èŠããããŸãã
ããã£ãã 説æããããšãããããŸãã
ããªãã解決ããããšããŠããåé¡ãèãã®ã¯è¯ãããšã§ãã
ããããããã圹ç«ã€ãã©ããã¯çå£ã«çã£ãŠããŸã...人ã ãããªãã®å¥œããªãã¿ãŒã³ãç°¡åã«å£ãããšãã§ããªãããã«ãã人ã ãå¶éãåé¿ããããã«ã¯ããã«æªãããšãããããã«ããŸãã
ããã¯ç§ã«å€ãã®æœè±¡åãæãåºãããŸãã æœè±¡åã¯ç§ãã¡ãéåžžã«å€ãã®åé¡ã«å·»ã蟌ã¿ãŸãã ãããã¯ã³ãŒããèªã¿ã«ãããããããã°ãã«ããããŸã...ããããæœè±¡åãè¡ãèœåãåãé€ãããšã«ãã£ãŠãããä¿®æ£ããããšã¯ã§ããŸãã...ããã¯ããã°ã©ãã³ã°ãå¯èœ/æçšã«ãããã®ã§ãã ããã«å¯Ÿãã解決çã¯ãèšèªããã¬ãŒã ã¯ãŒã¯ã®ã¬ãã«ã§ã¯ãªããæè²ãã¢ããã€ã¹ãåŠç¿ã§ãã ç©äºãé床ã«æœè±¡åããªãããã«äººã ã«å§ããŸãã
ããªãããã®ãããªãã¶ã€ã³å²åŠã«ã€ããŠè©±ããŠããããã«ç§ã«ã¯èãããŸãã å€ãã®å Žåãã³ãŒãã£ã³ã°äžã«èŠããŠããã®ã¯çŽ æŽãããå²åŠã§ãã ãããããããå¶éãšããŠèª²ãããããã°ã©ããŒããã®å¶éã«ãã£ãŠåœŒå¥³ãå¿ èŠãªããšãå®è¡ã§ããªããªããšèããå Žåã圌女ã¯ãããåé¿ããããšããŸããããã«ãããåé¿ããããšããŠãããã¹ãŠã®åé¡ãçºçããããã«æªåããŸãã
人ã ã¯åäŸãã芪ã®ç¶æ ãå€åãããããšããã®ããããããšã¯ããŸããã ããªãã¯äººã ã«ããããªãããã«åŒ·å¶ããããšã¯ã§ããŸããã
ããªãã®v-model
ã¯éåžžã«è€éãªã®ã§ãåãå€æŽã§ããããã«èŠªãªããžã§ã¯ã/é
åãšããŒãæž¡ãããšã§ãã®åé¡ãåé¿ããŸãã
ãã®æåŸã®ããããããã¯ãç§ãäŒããããšããŠããããšã®äžå¿ã«ãããšæããŸããç§ã¯ïŒå人çã«ïŒ .sync
ã®æ¬ åŠãåé¡ãšèŠãªãããããåé¿ãããããã¬ãŒã ã¯ãŒã¯ã䜿çšããŸããã å€ãã®äººãåãã¢ãããŒãããšãã§ãããã
èšããŸã§ããªãããšãããããŸãããã人ã ãç§ã«ãã¶ã€ã³å²åŠãæŒãä»ããããšãããšãå°ãè ¹ãç«ãŠãŸãã ç§ã¯ãã²ã©ãééã£ãŠãããã®ãäœãããããäºåºŠãšããªãããšãåŠã¶ã»ãããç§ããããã²ã©ã䜿ããããããªããšããæãã®ããã«æå³çã«åãå·®ãæ§ããã·ã¹ãã ã䜿ãããããã£ãšå¥œãã§ãã
PSç³ãèš³ãããŸããããç§ã¯èªåèªèº«ãå©ããããšã¯ã§ããŸããããã1ã€ã®ã³ã¡ã³ããããããç§ã¯ããªããã¡ãæŸã£ãŠãããã ã»ãšãã©ã®ããã°ã©ããŒã¯ããããã°ã§ããªãã³ãŒããèšè¿°ããŸãã ããã¯ããã¹ãŠã®ãã¬ãŒã ã¯ãŒã¯ã®ãã¹ãŠã®èšèªã®ãã¹ãŠã®ããã°ã©ããŒã«èµ·ãããŸãã ããããããã°ã©ããŒãããåªããããã°ã©ããŒã«ãªãæ¹æ³ã§ãã圌ãã¯ééããç¯ããä¿®æ£ã§ããªãã³ãŒããäœæããå°æ¥ãå¥ã®æ¹æ³ã§ç©äºãæžãæ¹æ³ãåŠã³ãŸãã èªåèªèº«ãé ã«æœè±¡åããããã°ã©ããŒãããããã°ã§ããªãã»ã©æ··ä¹±ããåã«ãèªåã®ãã¬ãŒã ã¯ãŒã¯ãããå°ãæ··ä¹±ããããè€éã«ãããã§ããããã«ããããã«ããã¬ãŒã ã¯ãŒã¯ãã ãŸããŠã¯ãããŸããã
@JasonWoofã¯ããæäŸããŸãã ããªãã¯ããªãã®å人çãªæèŠã«åºã¥ããŠããã«å察ããããšã¯èªç±ã§ãããç§ã¯ããªãã®è°è«ãã»ãšãã©èª¬åŸåããªããšæããŸãã
人ã ã¯åäŸãã芪ã®ç¶æ ãå€åãããããšããã®ããããããšã¯ããŸããã ããªãã¯äººã ã«ããããªãããã«åŒ·å¶ããããšã¯ã§ããŸããã
ãã¡ããã ãããŠãããããŸã å¿
èŠã§ãããããããªãããã€ãã®ãšããžã±ãŒã¹ããããããããªãã®ã§ãç§ãã¡ã¯ããããã匷å¶ãããŸããã ãããã£ãŠãåŒãç¶ãthis.$parent
ã«ã¢ã¯ã»ã¹ã§ããå°éå
·ãªã©ãä»ããŠ$data
ãæž¡ãããšãã§ããŸãããççŽã«èšã£ãŠãããããããšã¯ãã»ãšãã©ã®ã€ãã³ãã§$emit
ãããããã¯ããã«äŸ¿å©ã§ã¯ãããŸãããæéãªã®ã§ã .sync
ç ç³ã»ã©é
åçã§ã¯ãããŸããã
ãŸãã $parent
et.al. ã¯å
¬åŒã¬ã€ãã®äžéšã§ã¯ãªãããããããã䜿çšãããŠãŒã¶ãŒã¯ãææ¡ããããã¹ããã©ã¯ãã£ã¹ãç©æ¥µçã«åé¿ããŠããŸããããã¯èªç±ã«å®è¡ã§ããŸããããã®åäœã¯ãå§ãããŸããã
ãããã£ãŠããã¬ãŒã ã¯ãŒã¯ã¯ã .sync
ãããªãéæ³ã®ãã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒãæäŸããããšã«ãã£ãŠåæ§ã®åäœãä¿é²ããã¹ãã§ã¯ãããŸããããã®ãããªæ©èœãã»ãšãã©ã®ã·ããªãªã§èª€çšããããã¬ãŒã ã¯ãŒã¯ã確ç«ããããšããŠãããã¹ããã©ã¯ãã£ã¹ã«åããŠãããšæãããå Žåã§ãã
Youdaã«ã¯äžåœèªçããããŸããïŒ ã
vue-routerã®äºææ§ã¯ã©ã®ããã«èŠããŸããïŒ
@ roblav96
äºææ§ãä¿ã€ããã«å¿ èŠãªå€æŽãããã€ããããŸããã«ãŒã¿ãŒãVueã«ããŸãçµã¿èŸŒãããšãæãã§ããŸãã
@ blake-newman
vue-cliã§ãã€ã©ãŒãã¬ãŒããã³ãã¬ãŒãããŸãšããããšã¯ã§ããŸããïŒ ç§ã¯ãããæ©èœãããããšãã§ããªãããã§ãð¢
@ roblav96
çŸåšãããã€ãã®å€æŽããããäºææ§ãæãããããã«vue-loaderã§ããã€ãã®å€æŽãå¿ èŠã§ãã çŸåšã2.0ã¯ã倧èŠæš¡ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®äŸåé¢ä¿ãæŽæ°ããããŸã§ãå®éšã«ã®ã¿äœ¿çšããå¿ èŠããããŸãã
ããŒã¿/ãªãªãŒã¹åè£ã®ETAã¯ãããŸããïŒ
@EverttAlphaã¯ä»é±ã®äºå®ã§ãã ããŒã¿çã¯ãããã¥ã¡ã³ããå®æããã³ã¢æ¡åŒµã©ã€ãã©ãªïŒVue-router ectïŒããã®ãµããŒããå¢ããå¯èœæ§ããããŸãã ããŒã¿çãæåããããšã蚌æãããããåè£è ããªãªãŒã¹ããŸãã
@ blake-newmanã¯ãè¿ éãç°¡æœãå®å šãªå¯Ÿå¿ã«æè¬ããŸãã ãããã¯æé«ã§ãã :-D
vue 2.0ã§ã®replace: false
åé¿çã¯ãããŸããïŒ
ããã«ã¡ã¯ãJSXã¯ãã§ã«äœ¿çšå¯èœã§ããïŒ
@ reohjs-ããã
ã¹ã³ãã
@reohjsæšå€ã®Evanã®ã¹ããªãŒã ã§ã圌ã¯ãã©ã°ã€ã³ã§äœæã§ãããšè¿°ã¹ãã®ã§ããããããŒã¿çã«ãªããšã誰ããäœæããã®ã«ããã»ã©æéã¯ããããªããšæããŸãã ã³ã¢ã«å«ãŸããŠããªãããšãå¬ããæããŸãããJSXãã©ã°ã€ã³ã¯çŽ æŽãããã¢ã€ãã¢ã®ããã«èãããŸãã
ãããã³ã¢ã«ãªãããšãå¬ããæããŸã
ðððð
ããããã©ã°ã€ã³ã§ãªããã°ãªããŸããã ãã ããèŠãããããã«ããã³ãã¬ãŒãã«ã¯æšæºã³ã³ããŒãã³ãã«å€ãã®å©ç¹ããããŸãã
JSXã®ã³ã³ãã€ã«ã¯ããã®ãã©ã°ã€ã³ã䜿çšããŠç°¡åã«å®è¡ã§ããã¯ãã§ãïŒ https ïŒ
_h
é¢æ°ã¯React.createElement
代ããã«ãªããšæããŸã
2ãŠã§ã€ãã£ã«ã¿ãŒã眮ãæããæ¹æ³ãšããŠãã«ã¹ã¿ã vã¢ãã«ä¿®é£Ÿåãäœæããããã®ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããã®ã¯ã©ãã§ããïŒ ãããã¯ãã§ã«ãŠãŒã¶ãŒå
¥åã®è§£æã«äœ¿çšãããŠããããã§ãïŒããšãã°ã v-model.trim
ïŒã 解æ/ãã©ãŒããããåçŽã§ç¹å®ã®ããŒã¿ããããã£ããç¬ç«ããŠããå Žåã修食åã䜿çšãããšãåã
ã®ããŒã¿ããããã£ããšã«èšç®ããããã£ãèšå®ããããããããã«æ°ããã³ã³ããŒãã³ããäœæãããããããããã¯ããã«å°ãªããã€ã©ãŒãã¬ãŒãã§è§£æ/ãã©ãŒããããåå©çšã§ããŸãã解æ/ãã©ãŒããããé©çšããå
¥åã¿ã€ãã
ããã«ã¡ã¯ãç§ã¯çŸåšVue.js 1.0
ã§gettext
ããµããŒããããã©ã°ã€ã³ã«åãçµãã§ããã vm.$interpolate
ã䜿çšããŠãããã£ã¬ã¯ãã£ãããããŸãã
次ã®çç±ãããã³ãŒãã2.0
ã«ç§»è¡ããæ¹æ³ãç¥ãããã§ãã
vm.$interpolate
ã¯éæšå¥šã«ãªããŸã2.0
ã€ã³ã¹ã¿ã³ã¹ãæããªããªããŸããŸãã¯ããã£ã¬ã¯ãã£ããããåªããã¢ãããŒãã¯ãããŸããïŒ
import languages from 'src/plugins/translate/languages'
import translateUtils from 'src/plugins/translate/utils'
const translateDirective = {
terminal: true,
params: ['translateN', 'translatePlural'],
paramWatchers: {
translateN: function () {
this.translate()
},
},
isPlural: function () {
return 'translateN' in this.params && 'translatePlural' in this.params
},
bind: function () {
this.boundTranslate = this.translate.bind(this)
this.msgid = this.el.innerHTML.trim()
this.translate()
languages.eventEmitter.on(languages.languageChangedEventName, this.boundTranslate)
},
unbind: function () {
languages.eventEmitter.removeListener(languages.languageChangedEventName, this.boundTranslate)
},
translate: function () {
let n = this.isPlural() ? parseInt(this.params.translateN) : 1
let translation = translateUtils.getTranslation(this.msgid, n)
this.el.innerHTML = this.vm.$interpolate(translation)
},
}
export default translateDirective
ç§ã¯VueãåããŠäœ¿çšããã®ã§ãçãèšèãæããã ãã§ããAPIå šè¬ããŸãã¯_under-the-hood_ãã«ããŒã®åæžãèŠãŠãããããšèšã£ãŠãã ããã JavaScriptã¯ãã§ã«éåžžã«åŒ·åã§ãããèšç®ãããããããã£ã«å ããŠãã¬ãŒã ã¯ãŒã¯ã®ä»ã®ãªã¢ã¯ãã£ããªæ©èœã䜿çšãããšãã»ãšãã©ãã¹ãŠãå®çŸã§ããŸãã
ãã®_次ã®_ãªãªãŒã¹ã«å¯Ÿãã称è³ïŒ ð
@kemarç§ã¯gettextã«ããŸã詳ãããããŸããããVue.prototypeã$ translateã¡ãœããã§æ¡åŒµããŠããã
{{ $translate('some.Key.path') }}
ã¢ã»ãããé
åæ§æã§ç»é²ããæ©èœã¯2.0ããåé€ãããŸãããïŒ ã¢ã«ãã¡ã«åãçµãã§ããªãããããæå³çãã©ããçåã«æã£ãŠããã ãã§ãã
ããªãã¡ïŒ
components: [compA, compB, compC]
ES6ã«ã¯äŒŒããããªéèšãããããšã¯ç¥ã£ãŠããŸãããé åæ§æã圹ç«ã€ã·ããªãªãããã€ããããŸãã
rendering to native interfaces on mobile
ãšweex
ã«ã€ããŠãã£ããã£ãŠããŸãããvueãšæããŸããã
Vueã®Nativescriptã«æ²¿ã£ããã®ã¯ãããªããèšåããWeexãŸãã¯Quasarã®ããããã§ãã
ã¹ã³ãã
dispatch
ãŸãã¯broadcast
ãªããªã£ãå Žåãæ±çšã®åã³ã³ããŒãã³ãã¯ãã®èŠªã«ã€ãã³ã/å€æŽãã©ã®ããã«éç¥ããŸããïŒ ããã¯ãã°ããŒãã«ãã¹ãŸãã¯vuexã®ãã¿ãŒã³ã«é©åããŠããªãããã§ãã çŸåšäœ¿çšããŠãããŠãŒã¹ã±ãŒã¹ã¯ãæ€çŽ¢ãã£ã«ã¿ãŒã®ç¯å²ã¹ã©ã€ããŒã§ãã ç¯å²ã¹ã©ã€ããŒã³ã³ããŒãã³ãã¯æ±çšã§ãããããã€ãã®ç°ãªãæ€çŽ¢ãã£ã«ã¿ãŒã®åã§ãã çŸåšãç¯å²ã¹ã©ã€ããŒã®ã¹ã©ã€ããçµäºãããšãã«dispatch
䜿çšããŠããã芪ã¯å€æŽã«åºã¥ããŠæ€çŽ¢ãããªã¬ãŒããããšãç¥ã£ãŠããŸãã
@jrentonã€ã³ã©ã€ã³ãªã¹ããŒ<child @some-event="parentHandler">
çŽ æŽãããä»äºã®äººã
ç§ã®èŠè§£ã§ã¯ããã¹ãŠã®å€æŽã¯ããäžæ¹åãããŒãã®ã¿ã«åºã¥ããŠã³ã³ããŒãã³ãããªãŒãäœæããããšãæåã®ã¢ãããŒãã§ãããšèšã£ãŠããŸããããã¯ããããã°ãšä¿å®ãã¯ããã«ç°¡åã§ç°¡åã§ãã
ããããªããšãããŒã¿ã®çå®æ§ã¯ãæäžäœã®ã³ã³ããŒãã³ãããã®è·é¢ã«åæ¯äŸããŸãã
ãã ãããèšãããïŒ
render (h) {
return (
<div>
{this.things.map(thing => <Thing thing={thing}></Thing>)}
</div>
);
ç§ã幞ãã«ããŸã
2.0ã®ãªãªãŒã¹åã«ããã®ãªã¹ãã«ããã«è¿œå ããããšäºæ³ãããŸããïŒ åé¡ã¯ãŸã éããŠããã®ã§ããã èå³ããããŸãã
@zephraphã¯ããAPIãæŽæ°ãã
éå»ã«ã€ãã³ããã£ã¹ãããã䜿çšããããšããããvuexã§ç«ã¡åŸçããŠããŸãã芪ã³ã³ããŒãã³ãã«ã¯åã³ã³ããŒãã³ãã®ãªã¹ãããããå€ãå€æŽããããšãã«åãã€ãã³ãããã£ã¹ãããããŠããããã芪ã¯æ¬¡ã®ããã«äœããè¡ãããšãã§ããŸããããã®å€åã®åå¿ã
ããã§ãvuexã¹ãã¢ã«åã®å€ã®é
åãèšå®ããããšããŸããã éèŠãªã®ã¯ãåã³ã³ããŒãã³ããã²ãã¿ãŒã§ããããŠã¢ã¯ã·ã§ã³ã§ããã®é
åã®ã©ã®èŠçŽ ãæŽæ°ããå¿
èŠãããããã©ã®ããã«ç¥ãããšããããšã§ãã ç§ãèŠãéããvuexã¯å€ã®å€ç°ãåçã«ååŸãŸãã¯ããªã¬ãŒããæ©èœãæäŸããŠããŸãããããããšãç§ã¯ããã«ã€ããŠééã£ãŠããŸããïŒ
ã€ãã³ãããã£ã¹ãããããã«ãã®ã±ãŒã¹ãåŠçããããã®æè¯ã®æ¹æ³ã¯äœã§ããããïŒ
$broadcast
ãåé€ãããç¶æ
ã§ãç¹å®ã®ããšãèµ·ãã£ããšãã«çŽæ¥ã®åäŸã«äœããããããã«ã©ã®ããã«äŒããŸããïŒ ããã¯ãããŒã¿ãå®éã«å€æŽãããŠããªãã·ããªãªã§ããããããªã¢ã¯ãã£ãããããã¯é©åããªãããã§ãã
å°éå ·ã䜿çšããŠã¿ã€ã ã¹ã¿ã³ããŸãã¯ã©ã³ãã ããŒã¿ãæž¡ããåäŸã§ãã®å°éå ·ãèŠãããšãã§ããŸãããããã¯å¥åŠã«æããŸãã ã°ããŒãã«ã€ãã³ããã¹ã§ã¯äžæã®IDãçæããå¿ èŠããããããåã¯èŠªããã®ã€ãã³ãã«ã®ã¿åå¿ãã芪ã³ã³ããŒãã³ãã®ä»ã®ã€ã³ã¹ã¿ã³ã¹ã«ã¯åå¿ããŸããã
芪ãã€ã³ã©ã€ã³ãªã¹ããŒã䜿çšããŠèãããšãã§ããåã«ã¯$emit
ããããŸããããã®éã«äœããããŸããïŒ
å°éå
·ãä»ããŠãšããã¿ãŒã®ã€ã³ã¹ã¿ã³ã¹ãæž¡ãã次ã«åã§emmiter.on
ãæž¡ãããšãã§ããŸããããã
@gwilduã¢ã¯ã·ã§ã³ã¯åŒæ°ãåãããšãã§ãããããã¢ã¯ã·ã§ã³ãšäžç·ã«ã¢ã€ãã IDãæž¡ãããšãã§ããŸãã ãŸããã¢ã€ãã ã³ã³ããŒãã³ãã«ã¹ãã¢ãã察å¿ããã¢ã€ãã ããã§ããããã代ããã«ã芪ã®ãªã¹ãããã§ããããå°éå ·ã䜿çšããŠã¢ã€ãã ããŒã¿ãã¢ã€ãã ã³ã³ããŒãã³ãã«æž¡ããŸãã
// Vuex store
state: {
items: [],
},
mutations: {
ITEM_REMOVED: function(state, id) {
var io = state.items.findIndex(item => item.id === id);
state.items.splice(io, 1);
},
},
// within the parent component
vuex: {
getters: {
items: state => state.items,
},
actions: {
removeItem(store, id) {
store.dispatch('ITEM_REMOVED', id);
},
},
},
<!-- within the parent template -->
<item v-for="item in item"
:item-data="item.data"
@removed="removeItem(item.id)"
>
</item>
<!-- within the child template -->
<button @click="$emit('removed')">Remove</button>
ã¢ã€ãã ã«ããŒã«ã«ã§äžæã®IDããªãå Žåã¯ãã¢ã€ãã ãAPIããäœæãŸãã¯åä¿¡ããããšãã«IDãçæã§ããŸãã ã»ãšãã©ã®å Žåã cuidã¯ãã®ããã«ååã§ãã
@fergaldoyleã¯ã芪ãv-ref:some-child
ããŠãåã®vmãžã®åç
§ãååŸããŠããã $emit
ãæå®ããããã¡ãœãããçŽæ¥åŒã³åºãããšãã§ããŸãã this.$refs.someChild.<methodName>(...)
ã
ãã ãããã®å Žåã¯ã¢ãŒããã¯ãã£ãåèããããšããå§ãããŸããããã¯ãçºçããã€ãã³ãã«ãã£ãŠã³ã³ããŒãã³ãã®æšè«ãéåžžã«å°é£ã«ãªãããã§ãã
ç§ã¯vuejs2ã§éãã§ããŸããããåæ ŒãããšSnabbdomã«æ°ã¥ããŸãã
h('div', {style: {color: '#000'}}, [
h('h1', 'Headline'),
h('p', 'A paragraph'),
]);
ããªããåŸãã¬ã³ããªã³ã°é¢æ°ã«
<div style="color:#000;"><h1>Headline</h1><p>A paragraph</p></div>
ããããvuejsã§ã¯
<div style="color:#000;"><h1></h1><p></p></div>
ããã¹ãã³ã³ãã³ãïŒ <h1>
ïŒãå€æŽããæ¹æ³ã¯ãããŸããïŒ
@dubcanadaãªãåäŸãšããŠããããæž¡ãã®ã§ã¯ãªãã®ã§ããïŒ
ããã§ãããããã¯çã«ããªã£ãŠããŸãã ããããšã
ããã«ã¡ã¯ã Vue 2.0ã®ç§»è¡ã·ã¹ãã ã«ã€ããŠè³ªåããããŸããããã¯ãVue 2.0ã®èšç»ã«å«ãŸããŠããªããããææ¡ã§ãã Vue 1.0ã§ã¯ãèšå®ãããã©ã³ãžã·ã§ã³/ã¢ãã¡ãŒã·ã§ã³ããã€çµäºããããæ€åºããå¿ èŠãçããããšããããããŸããã ä»ãç§ã¯setTimeoutã䜿çšããŠãããè¡ããŸãããããã¯éåžžã«ããããŒã§éãæ¹æ³ã§ãããç§ãã¡ã¯çåæããããšãã§ããŸãã ã ããç§ã®è³ªåã¯ãããããã€ãã³ããä»ããŠãv-show / v-ifãšçµã¿åãããŠé·ç§»ã䜿çšãããšãã«CSSé·ç§»ã®çµäºãæ€åºããäœããã®æ¹æ³ã§Vue2.0ã«ãªããŸããïŒ
<my-comp v-show="isVisible" @transition-end="onTransitionEnd" transition></my-comp>
次ã®VueãªãªãŒã¹ã§ãã®ãããªãã®ãèŠãããšãã§ããŠãšãŠãããããã§ã:)ç§ãèããŠãããŠããããšã
@sqalãã©ã³ãžã·ã§ã³ããã¯ã§ãããè¡ãããšãã§ããŸãïŒ https ïŒ //jsfiddle.net/simplesmiler/Lrk9sxjf/97/
@dubcanada次ã®ãªãªãŒã¹ã§ãµããŒããããäºå®ã§ãïŒèŠçŽ ã®äœææã«ããŒã¿ãçç¥ããŸãïŒ
ãã³ããåºãããã«@fergaldoyleãš@simplesmilerã«æè¬ããŸãã
ç§ã¯æ°ã¥ããŠããŸããã§ããã芪ã¯åäŸã«ãã£ãŠçºããããã€ãã³ããèãããšãã§ããŸãã ãã¡ããããã®ãšãã¯ããã®æ³¡ç«ããªãã€ãã³ããèãæ¹ãçã«ããªã£ãŠããŸãã
ããã«ã¡ã¯ãã¿ããªã å°ãèæ¯ããããŸããç§ãã¡ã¯webglã䜿çšããŠããã3DãµãŒãã§ã¹äžã§ããã€ãã®ã€ã³ã¿ãŒãã§ã€ã¹ãå®è¡ããããšæããŸãã ããã¯ãããšãã°ãã£ã³ãã¹ãžã®ã€ã³ã¿ãŒãã§ã€ã¹ãã¬ã³ããªã³ã°ããŠããããã£ã³ãã¹ã®ã³ã³ãã³ãããã¯ã¹ãã£ã«å€æããå¿ èŠãããããšãæå³ããŸãã
ç§ã¯AngularãReactãVueã䜿çšããŠããŸããããç§ã«ãšã£ãŠã¯Vueãæãçã«ããªã£ãŠããŸãã Reactã«ã€ããŠèªãã§ãããšãã«ãreact-canvasãããžã§ã¯ãã«åºããããŸããã èå³æ·±ãã®ã¯ãä»®æ³DOMãå®éã®DOMããŒãã«å€æãã代ããã«ããã£ã³ãã¹ã«æç»ããããšã§ãã
Vue 2.0ãä»®æ³DOMã䜿çšããŠããã®ã§ããã®ãããªããšãã§ããã®ã ããããšæã£ãŠããŸããã
ããã«ã¡ã¯ã
.sync
ã®åé€ãšãæ±çšã³ã³ããŒãã³ãã§å°éå
·ãåŠçããããã®æ±çšã¯ãŒã¯ãããŒãã©ã®ããã«ãªãããå°ã説æããŸãã
ã ããã
<component :value.sync="some.value"></component>
ã«<component :value="some.value" @update="updateSomeValue"></component>
å°éå
·value
ã远跡ããããã®æšå¥šãããæ¹æ³ã¯äœã§ããïŒ
æãåºæ¬çãªã±ãŒã¹ã§ã¯ã
props: ['value'],
computed: {
_value: {
get(){
return this.value;
},
set(newVal) {
this.$emit('update', newVal);
return newVal;
}
}
}
ãã ããããã¯ç¢ºãã«èŠªã³ã³ããŒãã³ãããã®å€ãå°éå ·ã«è¿ãããšã«äŸåããŠãããããã³ã³ããŒãã³ããåã³å€ãååŸãããšãææ°ã®å€æŽãåæ ãããŸã...
ããã¯ã次ã®ãããªããšãè¡ãå¿ èŠãããããšãæå³ããŸããã
props: ['value'],
data() {
return {
_val: this.value
}
},
watch: {
value(newVal) {
this._val = newVal;
}
},
computed: {
_value: {
get(){
return this._val;
},
set(newVal) {
this._val = newVal
this.$emit('update', newVal);
}
}
}
ããã¯ãå€ã®åãæž¡ãïŒããã³å€æŽïŒãåŠçããå€ãå€æŽãããããšã芪ã«éç¥ããå€æŽã芪ã«ãã£ãŠäŒæãããªãå Žåã«å éšã§å€æŽã远跡ããããã®å€ãã®å®åæã®ããã§ãã
ãããšããããã§Vueã®éæ³ã®åå¿æ§ãå°ãæ¬ ããŠããŸããïŒ
ãŸããåŠçããå°éå
·ãããããããå Žåãããã¯éåžžã«è€éã«ãªãå¯èœæ§ããããŸãã
åäŸãã¡ãçŽæ¥å€ç°ããããã«this.$parent.value
ã«ã¢ã¯ã»ã¹ããã©ãããŒã³ã³ããŒãã³ããå°éå
·/èšç®/æèšãåŠçããã ãã®ã©ãããŒã³ã³ããŒãã³ããäœæããŠããã®ãã»ãŒèŠãããšãã§ããŸããã
@Towerful ã䟡å€ã远跡ããããšã¯ã©ãããæå³ã§ããïŒ ãããŠããªãæ瀺çãªthis.$emit('value-updated', newValue)
代ããã«ã»ãã¿ãŒã¹ã¿ã€ã«ïŒ this._value = newValue
ïŒãå¿
èŠãªã®ã§ããïŒ
äžæ¹åãããŒã®å©ç¹ã¯ã芪ãåããèŠæ±ãããå€æŽãé©çšããªãããšã決å®ã§ããããšããŸãã¯åããä¿çããšããŠããŒã¯ããŠåŸã§å€æŽãé©çšã§ããããšã§ãïŒããšãã°ããµãŒããŒã«ç¢ºèªããåŸïŒã
èšç®ãããããããã£ã䜿çšãã@simplesmilerã䜿çšãããšããã³ãã¬ãŒãã«ãã€ã³ãã§ããŸãã ãããã£ãŠã v-model
䜿çšã§ããŸãã
ãŸããã»ãã¿ãŒãšã²ãã¿ãŒã1ã€ã®å Žæã«å«ãããšãã³ã³ããŒãã³ãå
ã§å€ã«ã¢ã¯ã»ã¹ããŠå€ãå€æŽããã³ãŒãå
šäœã«åæ£ãããããŸããŸãªæ¹æ³ãšã¯å¯Ÿç
§çã«ãå€ãæŽæ°ããããšãã«æ©èœãç°¡åã«ç¢ºèªã§ããŸãã
ã¢ãã«å
ã§æ瀺çãªæ¹æ³ã䜿çšããã»ãã¿ãŒã䜿çšããªãå Žåãå®éã®ã¡ãœããã§ã¯ãªãã methods
ãªããžã§ã¯ãããã³ãã¬ãŒãã®updateValue
ã¿ã€ãã®ã¡ãœããã§ä¹±éã«ãªãããã§ãã
ããã¯ããŠãŒã¶ãŒãã³ã³ããŒãã³ãå
ã®ãªãã·ã§ã³ãéžæããã³ã³ããŒãã³ãããã®å€ã«äŸåããŠäœãéžæãããŠãããã瀺ãå Žåã«åœãŠã¯ãŸããšæããŸãã
芪ã³ã³ããŒãã³ãããããå®è¡ã§ããããã«ããã«ã¯ããããã³ã³ããŒãã³ãã«æ»ãããšã«äŸåããŠããŸãã
ãŠãŒã¶ãŒããªãã·ã§ã³ãéžæãããšãã«ãã³ã³ããŒãã³ãã®è¡šç€ºã®æŽæ°ãæåã§ããªã¬ãŒããªãéãã ããã¯Vueã®åå¿æ§ããé ããã£ãŠããããã§ãã
ãããã£ãŠãå
éšå€ã«ãããã¹ã姿ãã远跡ããããã³ãã¬ãŒãã«ããã«åå¿ãããŸãã ã»ãã¿ãŒ/ã²ãã¿ãŒã䜿çšããŠããããã£ãã©ããããå
éšã®å€æŽã远跡ããŠå€éšã®ã€ãã³ããçºçãããããããã£ãç£èŠããŠãå€éšã§å€æŽããããšãã«å
éšã®å€ãæŽæ°ããŸãã
ãã¶ããç§ã¯ãããè¡ãããã®æ°ããæ¹æ³ã«é ãæ©ãŸããã®ã«èŠåŽããŠããã ãã§ãã
@ Towerful-ããªãã ãã§ã¯ãããŸãã...
ã¹ã³ãã
@ã¿ã¯ãŒãã«ïŒ
ç§ã«ã¯ãããªãã説æããŠããã®ã¯æ¬è³ªçã«v-model
å
¥åã®ããã«æ©èœããã³ã³ããŒãã³ãã®ããã§ãããŠãŒã¶ãŒãUIã®å€ãå€æŽãããã®å€æŽããã€ã³ããããããŒã¿ã«ããã«åæ ãããããšèããŠããŸãã
ãããã®ã¿ã€ãã®ã³ã³ããŒãã³ãã®å Žåã2.0ã®ã³ã³ããŒãã³ãã§v-model
ã䜿çšã§ããŸãã
<my-input v-model="myValue">
// in my-input.vue
<input :value="value" @change="$emit('input', $event.target.value)">
export default {
props: ['value'] //special prop received from v-model
}
ããã«ãããå®éã®<input>
èŠçŽ ãšã«ã¹ã¿ã å
¥åã³ã³ããŒãã³ããžã®ã€ã³ã¿ãŒãã§ã€ã¹ãæ¬è³ªçã«åäžã«ãªããåæ¹åã®ãã€ã³ãã£ã³ã°ã«ãªããŸãã
è€æ°ã®å°éå
·ãåãåãïŒãããŠåçŽãªã«ã¹ã¿ã å
¥åã§ã¯ãªãããããæœè±¡çãªïŒããè€éãªã³ã³ããŒãã³ãã®å Žåãã»ãšãã©ã®ç¶æ³ã§æšè«ããã®ãé£ãããªãããã .sync
䜿çšã¯ãå§ãããŸããã
芪ã¯ãåããåãåã£ãå€ãã©ãåŠçãããã決å®ããå¿
èŠããããŸãããã®ããŒã¿ã¯ã .sync
ããã«æé»çã«å€æŽãããã¹ãã§ã¯ãããŸããã
äžèšã®vã¢ãã«ã¢ãããŒãã§ã¯ãœã«ãã³ã·ãŒã§ã¯ãªãã .sync
ã䜿çšããããšã§å©çãåŸãäŸãæäŸã§ããŸããïŒ ããã¯æœè±¡çãªçè«ãããè°è«ã®ããè¯ãåºç€ãããããŸããã
ãããã©ãããŠç§ã¯ãããéããã®ã§ããïŒïŒ ããã¯ééããªãOPã«ãããããã«ã€ããŠã®ããã€ãã®ã³ã¡ã³ãã®åã®è°è«ãããããŸãïŒ ä»ãç§ã¯å°ãæãã ãšæããŠããŸãã
v-model
ãã³ã³ããŒãã³ãã§äœ¿çšã§ããããšãããå°ãæ確ã«ããããã«ãå
ã®æçš¿ãæŽæ°ã§ããŸããïŒ
@LinusBorgé ããé¢ããŠãã³ã³ããŒãã³ãã®v-model
ãæ©èœããªãå Žåã¯èããããŸããã å
ã®æçš¿ã§ãã®éšåãèŠéããŸããã
è€éãªãªããžã§ã¯ãã³ã³ããŒãã³ãã®å Žåã§ããã³ã³ããŒãã³ãããã¹ãããã ãã§ãã ãããŠãããã«ããåäžè²¬ä»»ã³ã³ããŒãã³ãã匷åãããŸãã
ããã¯ã¯ããã«çã«ããªã£ãŠããŸã:)
@ã¿ã¯ãŒãã«
åïŒ v-model
ãŸãã ã€ãŸãã v-model
ã¯ïŒããæå³ã§ïŒåæçã§ãããã³ã³ããŒãã³ãéã®ããŒã¿ãããŒã¯ããŠã©ããã£ãŒãã¥ãŒïŒãã¢ïŒã®ããã«æ¬è³ªçã«éåæã§ãã ç§ã¯ãããå€ãã®äººã
ãæ··ä¹±ãããã®ãèŠãŠããŸããã äžæ¹åã®ãããŒã¯ãå°éå
·ãåæããŠããªãããšãããæ確ã«ããå°éå
·ãåæããŠããããšã«äŸåããªãããã«åŒ·å¶ããŸãïŒããã¯ããªããèªåã®éãéšãããšããŠãããã®ã§ãïŒã
ReïŒéç¶ãšããã¡ãœããã åçŽãªã±ãŒã¹ã§ã¯ããã€ã§ã@value-updated="value = $arguments[0]"
å®è¡ã§ããŸãã è€éãªã±ãŒã¹ã§ã¯ãç¶æ
ã調æŽããŠäžè²«æ§ãä¿ã€ããšãã§ããã¡ãœãããçšæããããšããå§ãããŸãïŒããšãã°ãæåã§æŽæ°ãããªã¬ãŒããŸãïŒã 次ã®ãã€ã³ããžã®ã»ã°ãŠã§ã€ã
ReïŒåå¿æ§ããé¢ããã ç§ã¯ãã®å£°æã«åæããŸããã åçŽãªã±ãŒã¹ã§ã¯ã value-updated="value = $arguments[0]"
ã§æŽæ°ãããå€ãåäŸã«ååŸãããããã«ãéæ³ã¯å¿
èŠãããŸããã
è€éãªã±ãŒã¹ã§ã¯ã .sync
å°éå
·ã䜿çšãããšã watch
ã䜿çšããå¿
èŠããããŸãããæ瀺çãªwatch
ã¯å®éã«ã¯åå¿æ§ã®äžéšã§ã¯ãããŸããã ããã¯ãšã¹ã±ãŒããããã§ãããèšç®ããããã®ãšããŠè¡šçŸã§ããªãæåæŽæ°ãããªã¬ãŒããŸãã ãããŠãèšç®ããã猶ã®ããã«åæçã«å€åã«åå¿ããããšãã§ããªãã®ã§ãããã¯è¯ããã®ã§ã¯ãããŸããã ãããã watch
å€çšããå ŽåãããŒã¿ã®æŽæ°ãäŒæããã®ã«ããã€ãã®ãããããå¿
èŠãšããå Žåãããçç±ã§ãã çŽæ¥ãã¹ããããnextTick
ã«åºããããããšããããªããç§ãäœã話ããŠããã®ããåç¥ã§ãããã
çŸåšã -updated
ãã³ãã©ãŒã¯ããåªãããšã¹ã±ãŒãããããæäŸããåãæå³ãè¡šçŸããåŸã«è€éãªã¢ãã«ã®å€æŽãåæçã«ïŒãŸãã¯åæã«éåæçã«ïŒé©çšã§ããããã«ããåã次ã®ãã£ãã¯ã§æŽæ°ãããå€ãåãåãããã«ããŸãïŒãŸãã¯åãåããªãããã«ããŸãïŒäžè²«æ§ã®ãªãç¶æ
ãåãåããŸãïŒã
@ yyx990803vuejs1ã§$ dispatchãš$ broadcastã®ã€ãã³ãããã£ãã®ãšåãããã«ã$
ããvuejs颚ã®ãããã«æ²¿ã£ãäœãïŒãonããŸãã¯ãlistenãïŒãæããŸãïŒ
Vue.component('cart', {
template: "#cart-template",
data () {
return {quantity : 0 }
},
watch: {
'quantity': function (quantity, oldQuantity) {
console.log('quantity changed from %s to %s', oldQuantity, quantity)
bus.$emit('cart.quantity-changed', quantity)
}
}
});
new Vue({
el: '.container',
data : function () {
return {
quantity: 0
};
},
on: {
'cart.quantity-changed': function (newQuantity) {
console.log('quantity change emitted');
Vue.set(self, 'quantity', newQuantity);
}
},
computed:{
gold: function(){
return this.quantity * 100
}
}
})
ããã¯åºæ¬çã«ãèªåçã«ã°ããŒãã«ãã¹ã«æ¥ç¶ããŸãã
ã€ãã³ããã¹ã¯ãç§ãã¡ã奚å±ããããã¿ãŒã³ã§ã¯ãããŸãããããã¯ãäžéšã®ãšããžã±ãŒã¹ã§ã®ã¿åœ¹ç«ã¡ãŸãã äžè¬çã«ãvuexã®ãããªã¹ãã¢ãã¿ãŒã³ã奜ãŸããŸãã
ãã¹ã®äœ¿çšã容æã«ãããå ¬åŒã«ãµããŒããããŠããããšæããAPIãå®è£ ããããšã¯ãééã£ãã·ã°ãã«ã«ãªããŸãã
äŸãèŠããšãäž¡æ¹ã®ã³ã³ããŒãã³ããã¢ã¯ã»ã¹ããã¹ãã¢ã«æ°éãä¿åããå Žåãã€ãã³ãã¯å¿
é ã§ã¯ãããŸããã container
ã³ã³ããŒãã³ãã®èšç®ãããããããã£ã¯ãèªåçã«æŽæ°ãããŸãã
vuexã®ãããªå®éã®ã¹ãã¢ãœãªã¥ãŒã·ã§ã³ã䜿çšããªãç°¡åãªãµã³ãã«ã³ãŒãïŒ
var store = {
cart: {
quantity: 0
}
}
Vue.component('cart', {
template: "#cart-template",
data () {
return store.cart
},
});
new Vue({
el: '.container',
data : function () {
return store.cart;
},
computed:{
gold: function(){
return this.quantity * 100
}
}
})
vue2ã®äžè¬çãªèãæ¹ã¯ãèªåãæã¡ã«ããããããšã ãšæããŸã
足å
ã«ã
11:24ã®æ¥ã2016幎7æ3æ¥ã«ã¯ããã«ã¹ãã³LÃŒnborg [email protected]
æžããŸããïŒ
ã€ãã³ããã¹ã¯ç§ãã¡ã奚å±ããããã¿ãŒã³ã§ã¯ãããŸãã-ããã¯ãã ã§ã
ããã€ãã®ãšããžã±ãŒã¹ã圹ç«ã¡ãŸãã äžè¬çã«ãvuexã®ãããªã¹ãã¢ãã¿ãŒã³ã奜ãŸããŸãããã¹ã®äœ¿çšã容æã«ãããå ¬åŒã«ãæããAPIãå®è£ ãã
ãµããŒããããŠãããã¯ééã£ãä¿¡å·ã«ãªããŸããâ
ã³ã¡ã³ãããã®ã§ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/vuejs/vue/issues/2873#issuecomment -230158828ããŸãã¯ãã¥ãŒã
ã¹ã¬ãã
https://github.com/notifications/unsubscribe/AACoukCpCgYlDbVej_w_h4NEhQ-imYHBks5qR9QwgaJpZM4IedHC
ã
@kharysharpe $emit
ã¯ãåã€ã³ã¹ã¿ã³ã¹ã§v-on
ããŠãªãã¹ã³ããããšãç®çãšããŠããŸãã ããã«ã¯ãã€ã³ã¹ã¿ã³ã¹ã䜿çšãããŠããå Žæã®å
ã®ã³ã³ããã¹ããå©çšã§ãããšããè¿œå ã®å©ç¹ããããŸãã
<list-item v-for="(item, index) in items"
:title="item.title"
@remove="items.splice(index, 1)"
>
</list-item>
2.0ãªãªãŒã¹ã®æ¥ä»ã¯ãããŸããïŒ ç§ã¯ãã®å€åã«ããªãè奮ããŠããŸãã ããã§ãšãããããŸãïŒ
Vue 2.0 + Reduxã®äœ¿çšãèããŠããŸãã
@SendoushiæçµãªãªãŒã¹ã®æ¥ä»ã¯ãŸã ãããŸããããããŒã¿çã¯1é±é以å ã«ãªãå¯èœæ§ããããŸãã ð Vuex 2.0ã¯ãŸããäžç·ã«éçºãããŠããããããçŸåšã®vuexãããã¯ããã«ç°¡åãªAPIãåããŠããŸããã ãã§ãªããã¯ããã«ãããã«Reduxã®ããVueã®ãšã³ã·ã¹ãã ã«çµ±åããã ãã§ãªãã
Vuex 2.0ãäžç·ã«éçºãããŠãããçŸåšã®vuexãããã¯ããã«ã·ã³ãã«ãªAPIãåããŠããã ãã§ãªããreduxãããã¯ããã«ããŸãVueãšã³ã·ã¹ãã ã«çµ±åãããŸãã
@chrisvfritzèããŠçŽ æŽãããã§ãïŒ çŸåšã®APIã¯å°ãé床ã§ãäžå¿ èŠã«è€éã ãšãã€ãæããŠããŸããã è£åããããã«ãã®ãããªããšãããªããã°ãªããªãããšã«ãªããŸããïŒ
const mutations = {
LOGIN (state) { state.loggedIn = true },
LOGOUT (state) { state.loggedIn = false }
}
export const types = Object.keys(mutations)
// For now we dynamically generate all the actions like this.
// It's rare when anything more complicated is needed, but there
// is an example here:
// http://vuex.vuejs.org/en/actions.html
export const actions = types.reduce((o, el) => {
var action = S(el.toLowerCase()).camelize().s
o[action] = ({dispatch}, ...args) => dispatch(el, ...args)
return o
}, {})
vue2ãšvuex2ã®ããŒããããã«ã€ããŠã¯ã©ãã§ããïŒããããäžç·ã«ãªãªãŒã¹ããäºå®ã§ããããããšãååŸã«ãªãªãŒã¹ããäºå®ã§ããïŒãŸããç°ãªãããŒãžã§ã³ã®äºææ§ã«ã€ããŠã¯ã©ãã§ããïŒ
äžèšã®è³ªåã«é¢é£ããŠãvue-routerã®ã¹ããŒã¿ã¹ã¯ã©ããªã£ãŠããŸããïŒVue 2ã®ãµããŒãã¯ãŸããªãååŸãããäºå®ã§ããããããšãVue 2ã®ãã¹ãã¯ã«ãŒã¿ãŒãªãã§å®è¡ããå¿ èŠããããŸããïŒ
@gwilduãããã¯ããçšåºŠäžç·ã«ãªãªãŒã¹ãããå¯èœæ§ãé«ããVuex2.0ã¯Vue2.0ã®ã¿ããµããŒãããŸãã 2.0ããåã®Vuexã¯ãVue 1.xããµããŒããããªããªããŸã§ãåŒãç¶ããµããŒããããŸãã
@Uninen Vue Routerã¯ãVue 2.0ããªãªãŒã¹ãããåã«ã次ã«ããã€ãã®æãåãåãããšã«ãªããŸãã
nfo @ chrisvfritzã
@chrisvfritz @Uninenä¿®æ£ïŒVuex2.0ã¯Vue1.xã§ãæ©èœããŸãã
vue-router
次ã®ã¡ãžã£ãŒããŒãžã§ã³ã¯Vue2.xã®ã¿ããµããŒãããŸãã
ã©ã³ã¿ã€ã ã®ã¿ã®ãã«ãïŒã³ã³ãã€ã©ãŒãå«ãŸããŠããªããããã³ã³ãã€ã«æé ã§ãã³ãã¬ãŒããäºåã«ã³ã³ãã€ã«ããããæåã§ã¬ã³ããªã³ã°é¢æ°ãäœæããå¿ èŠããããŸãã
vueify / vue-loaderãš.vue
ãã¡ã€ã«ã䜿çšããã«ãã³ãã¬ãŒããããªã³ã³ãã€ã«ããæ¹æ³ã¯ãããŸãã/ãããŸããïŒ ããã§ãªãå Žåã¯ãã³ã³ããŒãã³ãå
ã®template:
ããããã£ãrender
é¢æ°ã«å€æããããã®babelãã©ã°ã€ã³ãçšæããããšããå§ãããŸããïŒ
2.0ã«ã¢ããã°ã¬ãŒãããåŸããéæšå¥šã®æ©èœãåŒãç¶ã䜿çšã§ããŸããæåã«2.0ã«ã¢ããã°ã¬ãŒãããŠãããéæšå¥šã®æ©èœããã£ãããšå€æŽã§ããŸããïŒ
elementDirectiveããªããªã£ãã®ã§ãã¿ãŒããã«ã³ã³ããŒãã³ããäœæããããšã¯å¯èœã§ããïŒ
è¿°ã¹ãããã«ïŒ
v-modelã¯åæã€ã³ã©ã€ã³å€ãæ°ã«ããªããªããŸããã åžžã«Vueã€ã³ã¹ã¿ã³ã¹ããŒã¿ãä¿¡é Œã§ããæ å ±æºãšããŠæ±ããŸãã
ãããèæ ®ããŠãã ãã
<child-component>
<input type="checkbox" :id="_uid" v-model="childModel" :value="value" />
<label :for="_uid"><slot></slot></label>
</child-component>
ã«ã¹ã¿ã ã³ã³ããŒãã³ãéã®é åã®ãã§ãã¯ããã¯ã¹ãã©ã®ããã«åŠçã§ããŸããïŒ
_æŽæ°1ïŒ_
解決ããŸããã ããããtype="checkbox"
ã芪ã³ã³ããŒãã³ãã®åã³ã³ããŒãã³ãã«è»¢éããŸãã
<parent-component>
<child-component type="checkbox" v-model="parentModel" value="apple" />
<child-component type="checkbox" v-model="parentModel" value="orange" />
<child-component type="checkbox" v-model="parentModel" value="banana" />
</parent-component>
次ã«ã {props: [ 'value' ]}
ä»ããŠã€ã³ã©ã€ã³å€ãååŸã§ããŸãã
change
ã€ãã³ãã芪ã³ã³ããŒãã³ãã«çºè¡ããŠãå€ãå€æŽãããããšãéç¥ããŸãã
<child-component>
<input type="checkbox" :id="_uid" v-model="childModel" :value="value"
@change="$emit('change', $event)"
/>
<label :for="_uid"><slot></slot></label>
</child-component>
ããã¯ãã³ã³ãã€ã©ãtype
ã«åŸã£ãŠv-model
ãã£ã¬ã¯ãã£ããã³ã³ãã€ã«ããããã§ãã ãããŠãã³ã³ãã€ã©ãŒã¯checked
ãããããçæããããã«change
ã€ãã³ãããã€ã³ãããŸãã
_æŽæ°2ïŒ_
ãã ãã v-model
ãchecked
å±æ§ãçŽæ¥å€æŽããããã updated
ã©ã€ããµã€ã¯ã«ããã¯ã¯ããªã¬ãŒãããŸããïŒã€ãŸãã change
ã€ãã³ããååŸã§ããŸããïŒ v-model
ã®å€ãå€æŽããããšã«ããããã€ãã£ãhtmlãã§ãã¯ããã¯ã¹ã³ã³ããŒãã³ãã®
ããã§ã @ yyx990803 ã v-model
å€æŽåŸã«change
ã€ãã³ããããªã¬ãŒã§ããŸããïŒ
@ YunSun-CNåé¡ãåé¿ããå¯äžã®æ¹æ³ã¯ãå€ala valã«åºæã®ããããã£ãè¿œå ããããã䜿çšããŠå®éã®å€ãèšå®ããv-modelã®å ¥åã«å€æŽãå ããããšã§ããã ' ã€ãã³ãã
@johnleider v-model
åäœãã·ãã¥ã¬ãŒãããã«ã¹ã¿ã ãã£ã¬ã¯ãã£ããäœæããŸããã
ã¡ãªã¿ã«ã type
propããã§ãã¯ããã ãã§ãªããèŠçŽ ã®tagNameããã§ãã¯ããå³å¯ãªæ¹æ³ã§ã¢ãã«ãçæããå¿
èŠããããŸãã ããããªããšã type
propãæã€å¥ã®ã«ã¹ã¿ã ã³ã³ããŒãã³ããããã©ã«ãã®ã¢ãã«ã®åäœãäžæžãããå¯èœæ§ããããŸãã
ããã«ã¡ã¯ã ãªãªãŒã¹æ¥ãç¥ã£ãŠããŸããïŒ
@thanosalexanderãŸã æ¥ä»ã¯æ±ºãŸã£ãŠããŸããã
ããããŸãã..ç§ã¯ããã§è¡ããŸããããŠ..ç§ã¯éŠ¬å°å±ãžã®ã¹ãããã倧ãããããšã¯æããªãïŒ ããããšãããããŸã
ããã¥ã¡ã³ãã¯ã©ãã§ããïŒ Vueãæ©æã«æ¡çšãããçç±ã®1ã€ã¯ããã¥ã¡ã³ãã§ããããããv2ã§ä»ç§ãåŒãæ¢ããŠããå¯äžã®çç±ã§ãã ããã¥ã¡ã³ãã®ãã©ããŒã¢ããã§åé¡ãçºçããŸããããéããªãçµäºããäºå®ã¯ãããŸããã ããããç§ã¯å éšã§èµ·ãã£ãŠããããšãããŸãç¡èŠããŠããã®ã§ãããããªã質åãæèµ·ããã®ã:)
2.0ã§ã³ã³ããŒãã³ãã®åãæ¿ã以å€ã«é·ç§»ã¢ãŒããå®è£
ããèšç»ã¯ãããŸããïŒ
https://github.com/vuejs/Discussion/issues/156
@ miljan-aleksic Docsã¯ã2.0ãæ£åŒã«ãªãªãŒã¹ããããšãã«æºåãæŽããŸãã ãŸã ããŒã¿çã§ãã ;ïŒ
ãããŸã§ã¯ãããã§ããã¥ã¡ã³ãã®é²æç¶æ³ã確èªã§ããŸãïŒãŸãã¯æçš¿ããããšãã§ããŸãïŒ
@aristidesflãã§ã«å®äºããŠããŸãã ð
@ miljan-aleksic @LinusBorgãè¿°ã¹ãããšã«ããã§ãœãŒã¹ãèªãããšãã§ããŸãã ãã ããå·çæç¹ã§ã¯ã beta.2ã§ã®å€æŽãåæ ããããã«å®å šã«æŽæ°ãããŠããããéèŠãªãã¢ã¬ãã¥ãŒããŸã è¡ãããŠããããä»ã«ãããã€ãã®ãã€ããŒãªAPIå€æŽãæ€èšãããŠããããšã«
ãŸããåªããããã¥ã¡ã³ããVueã®éèŠãªéšåã§ããããšã«åæããŸãã ã§ããã³ã»ã¢ãã©ã¢ããªã¢ã¯ãããŒã ããã¯ãç§ãã¡ã®ããã¥ã¡ã³ããæããŠããŸãã ðãããã2.0ããã¥ã¡ã³ãã_ããã«åªããŠãã_ãšããã®ãç§ã®å人çãªç®æšã®1ã€ã§ããçç±ã§ãã ãããŸã§ã®é...
ããã¯ãããã¥ã¡ã³ããäœæããéã®ç§ã®äž»èŠãªãªãœãŒã¹ã®1ã€ã§ãããJasmineã«ç²ŸéããŠããå Žåã¯ãäžè¬çã«éåžžã«èªã¿ããããªã£ãŠããŸãã
@chrisvfritzã«æè¬ã
onã䜿çšããrenderé¢æ°ã®createElement
ã¯ãé
åãåŠçããŠããªãããã§ãïŒsnabbdomã®ããã«ïŒãåŒã³åºãããé¢æ°ã«ããŒã¿ãæž¡ãæ¹æ³ã¯ãããŸããïŒ
ããšãã°ãsnabbdomã§ã¯äœ¿çšã§ããŸã
{on:{click: [function, dataToPass]}}
ãããŠã function
ã¯æåã®åŒæ°ãšããŠdataToPass
ãååŸããŸãã ããããããã¯vuejs 2 beta 2 Uncaught TypeError: arr[i] is not a function
ã§ã¯ãšã©ãŒã«ãªãããã§ãã on from createèŠçŽ ã䜿çšããŠããŒã¿ãšã€ãã³ããæž¡ãæ¹æ³ã¯ãããŸããïŒ
@dubcanada Vue 2.0ã§ã®ã€ãã³ãåŠçã¯ãsnabbdomã®ãã®ãšã¯ç°ãªããŸããé¢æ°ãèªåã§ã«ã¬ãŒããå¿ èŠããããŸãã é åæ§æã¯ãè€æ°ã®ãã³ãã©ãŒãåãã€ãã³ãã«ã¢ã¿ããããã ãã§ãã
ã¹ãããã®ã³ã³ãã³ããã¬ã³ããªã³ã°ããã®ã§ã¯ãªããæååãšããŠååŸããããšããŠããŸãã æšæºããŒãã§ã¯ç°¡åãªåé¿çããããŸãããVnodeã§ã¯æ¹æ³ãèŠã€ãããŸããã§ããã åé¿çã¯ãããŸããïŒ
@ miljan-aleksicã¬ã³ããªã³ã°ããŠã innerHTML
ã§èŠçŽ ã®ã³ã³ãã³ããååŸããŠãããcssã§display: none
ã§èŠçŽ ãé衚瀺ã«ããŠã¿ãŠãã ããã
å©ããŠãããŠããããšãã ã¬ã³ããªã³ã°ãããšãæçµçãªåºåãç°ãªããŸãã åã®ã³ã³ãã³ããpre
ã¿ã°ã§ã©ããããHTMLããšã³ã³ãŒãããã³ã³ããŒãã³ããäœæããŠããŸãã
ãã®å Žåãå ã®èŠçŽ ãšã¯ç°ãªãèŠçŽ ã§åºåãã¬ã³ããªã³ã°ããŸãã
ãã³ãã¬ãŒãã¯ã³ã³ãã³ãã®æžãæ¹ã§ã¯ãªãããšã匷調ããŠãããŸããã ããã¯ãã³ã³ãã³ãèªäœã§ã¯ãªããã³ã³ãã³ãã®èšè¿°æ¹æ³ã説æããæ¹æ³ã§ããå¿ èŠããããŸãã ããã¹ããæååãšããŠJSã«ïŒãŸãã¯ãããžã§ã¯ãå ã®å¥ã®å Žæã«ãããªãœãŒã¹ãšããŠãç¹ã«ãŠãŒã¶ãŒå ¥åã®å Žåã¯ïŒä¿åããŠãããåã«å°éå ·ãšããŠæž¡ãããšããå§ãããŸããããã«ããã1000åã®åŠçãå¯èœã«ãªããŸãããšã«ããç°¡åã§ãã
ããªãã¯æ£ãã@Kingdaroã§ããæåã®æ¹æ³ã¯ãæŠå¿µãæ··åãããã·ã³ãã«ã«ä¿ã€ããšã§ãã æ§æhihgligthigãããã®ã¯è¯ãã£ãã§ãã:)
v-on
ãã£ã¬ã¯ãã£ãã䜿çšãããšã $arguments
å€æ°ã¯äœ¿çšã§ããªããªããŸãã ããã§ã¯ããã®å€æŽã«é¢ããåç
§ã¯ãããŸããã ãã°ãŸãã¯åç
§ããããŸãããïŒ
@ miljan-aleksicã¯arguments
ãŸãã
PHPéçºè ã§ãªããã°ãªããŸããïŒç§ã®ããã«ïŒ...ç§ã¯ããªããã©ã®ããã«æããŠãããç¥ã£ãŠããŸãã ç¬ïŒ
ã¹ã³ãã
@ç§ã¯@smolinari yyx990803ã...ãšæ¥ããã1ã«ãªããŸããïŒç¬ïŒã ç§ã¯èªåããã§ã«ãããè©Šãããšèªåèªèº«ã«ä¿¡ããããŸãã...ç§ã¯ååã§ã¯ãªãã£ãããã§ãã ããã¯æ©èœããŠããŸããããããšãããããŠããªãã®æéãç¡é§ã«ããŠç³ãèš³ãããŸããã
å¥ã®ãåé¡ãã«ã€ããŠãã±ãããéãããšããŠããŸãããããããæ£ãããã©ããã¯ããããããŸãã... ref
ãããšãç»é²ãããã³ã³ããŒãã³ããŸãã¯èŠçŽ ãããã«å©çšã§ããªãããããã®ãããªãã®ã¯æ©èœããŸããã
<button ref="button"...></button>
<foo :connect="$refs.button"></foo>
Fooãã¬ã³ããªã³ã°ãããŠããæç¹ã§ã¯ã $refs.button
ã¯ãŸã å®çŸ©ãããŠããŸããã Vue1ã§ã¯æåŸ
ã©ããã«æ©èœããŠããŸãã ä»åã¯äœã足ããªãã®ã§ããïŒ
DOMèŠçŽ ãŸãã¯ã³ã³ããŒãã³ãã€ã³ã¹ã¿ã³ã¹ãå°éå ·ãšããŠæž¡ããŠã¯ãªããªããšããããšãèŠéããŠããŸã...
ãªãããã¯æªãèãã§ããïŒ ãã¿ã³ïŒããªã¬ãŒïŒã«æ¥ç¶ãããããããããŠã³ã³ã³ããŒãã³ãããããšããŸãããã ã©ã¡ããç¬ç«ããã³ã³ããŒãã³ãã§ãããã¯ãšãªãä»ããŠããããæ¥ç¶ãã代ããã«ãåç §ãçŽæ¥æž¡ããŸãã
@ miljan-aleksicç¶æ ãä»ããŠããããæ¥ç¶ããããšã¯ããã«è¯ãã§ãïŒ
ãã®ããã«ããŠãããããããŠã³ãšãã¿ã³ã¯å®å šã«åé¢ããããã¿ã³ã¯ä»ã®ã¿ã€ãã®ã³ã³ããŒãã³ããå¶åŸ¡ããããã«åå©çšã§ããããããããŠã³ã¯ä»ã®ã¿ã€ãã®å ¥åã³ã³ããŒãã³ãã«ãã£ãŠå¶åŸ¡ã§ããŸãã
å€ãç¿æ £ãåãé€ãã®ã¯ç°¡åã§ã¯ãããŸããã ç§ã¯jQueryã®ããã«ããã¹ãã§ããããããšãäž»ã«ç§ã責ããã¹ãã§ããïŒ ïŒD
ããªãã®ã¢ãããŒãããšãŽã¡ã³ã¯æ£ããã§ãã ããããããŠã³ã®çµ±åãããé¢åã«ãªãããšãæå³ããå Žåã§ããç§ã¯ãã®ããã«é²ã¿ãŸãã 芪ã³ã³ããŒãã³ãã¯ãããŸããŸãªã€ãã³ãããªãã¹ã³ããæ¹æ³ãç¥ã£ãŠããå¿ èŠããããããå€éšãã¯ãªãã¯ãããšãã«ããããããŠã³ãéãã ãã§ãªãéããããšããããããããŠã³èªäœã¯ç¥ããªãããšãªã©ããããŸããããããããŠã³ã解決ããŠããå€ãã®ã€ãã³ããšåé¿çã
芪ã³ã³ããŒãã³ãã¯ãããŸããŸãªã€ãã³ãããªãã¹ã³ããæ¹æ³ãç¥ã£ãŠããå¿ èŠããããããå€éšãã¯ãªãã¯ãããšãã«ããããããŠã³ãéãã ãã§ãªãéããããšããããããããŠã³èªäœã¯ç¥ããªãããšãªã©ããããŸããããããããŠã³ã解決ããŠããå€ãã®ã€ãã³ããšåé¿çã
ããã§ãã§ããŸããïŒ ããããããŠã³ã³ã³ããŒãã³ãããaddEventListener('body', ... )
ãå®å
šã«å®è¡ããŠãå€éšã¯ãªãã¯ãªã©ãç»é²ã§ããŸããããšãã°ãããããããŠã³ã¯ã誰ããå€éšãã¯ãªãã¯ãããšãã«ã芪ã«å¯ŸããŠãéãããã€ãã³ããçºè¡ããã ãã§ãã
ãããããã ããã€ãã®ã³ã³ããŒãã³ãããªãã¡ã¯ã¿ãªã³ã°ããæãæ¥ãŸãã:)ã¿ããªããããšãïŒ çŽ æŽãããã³ãã¥ããã£ã
createElement
ã³ã³ããŒãã³ãã«v-model
ãé©çšããã«ã¯ã©ãããã°ããã§ããïŒ ãã³ãã¬ãŒãã³ã³ãã€ã©ã䜿çšããŠçæãããã³ãŒãã調ã¹ãŸããããããã¯å€ãã®ã³ãŒãã§ãã ãã£ã¬ã¯ãã£ãã«é¢ããããã¥ã¡ã³ããããããããŸããã§ããã
ããã©ã«ãã§ã¯ãã³ã³ãã€ã«æãã£ã¬ã¯ãã£ãã¯ãã£ã¬ã¯ãã£ããæœåºãããã£ã¬ã¯ãã£ãã¯å®è¡æã«ååšããŸããã ãã£ã¬ã¯ãã£ããã©ã³ã¿ã€ã å®çŸ©ã§ãåŠçããå Žåã¯ãå€æé¢æ°ã§trueãè¿ããŸãã
@blocka render
é¢æ°ã䜿çšããŠããå Žåãçµã¿èŸŒã¿ãã£ã¬ã¯ãã£ãã«ã¢ã¯ã»ã¹ã§ããŸããã åçã®ããžãã¯ãèªåã§åŠçããå¿
èŠããããŸãã ããšãã°ã v-if
ã¯åãªãäžé
åŒã§ããã v-for
ã¯array.map()
åŒã§ã...ãããŠv-model
ïŒéåžžã®<input>
èŠçŽ äžïŒ ïŒã¯ã value
ãã€ã³ãã£ã³ã°ãšinput
ã€ãã³ããªã¹ããŒã«å€æãããŸãã
vue 1ã§ã¯ãvuexãšreduxã®2ã€ã®å©ç¹ãè¿°ã¹ãããŠããŸãã
ä»®æ³domã䜿çšãããšã1ã®äžéšãŸãã¯ãã¹ãŠã軜æžãããŸããïŒ
@blockaã¯ãã®äžéšã軜æžããŸãããå šäœçãªããã©ãŒãã³ã¹ã¯Reduxãããã¯ããã«åªããŠããŸãã
2.0ã§å€æŽãããã®ã¯ãåå¿æ§ã®ç²åºŠã§ãã æ¯èŒããŠã¿ãŸãããïŒ
shouldComponentUpdate
ãåºç¯å²ã«å®è£
ããå¿
èŠããããŸããäžè¬çã«2.0ã§ã¯ãïŒ1.xãšæ¯èŒããŠïŒè¡šç€ºãããŸã
ããã
animated.cssã§ãã©ã³ãžã·ã§ã³ãæ©èœããŸããã
<transition enterClass="fadeIn" leaveClass="fadeOut" class="animated" mode="out-in">
<router-view keep-alive></router-view>
</transition>
誰ããã¢ã€ãã¢ãæã£ãŠããŸããïŒ
ããªãã®å°éå ·ã®ååã¯ééã£ãŠããŸãã
ãã£ã¡ã«ã±ãŒã¹ãšã±ããã±ãŒã¹ã¯2.0ã§ãé©çšãããŸãã
<transition enter-class="fadeIn" leave-class="fadeOut" class="animated" mode="out-in">
<router-view keep-alive></router-view>
</transition>
@LinusBorgç³ãèš³ãããŸããããç§ã¯ãã§ã«ãããè©ŠããŸããã ããã«å°ããªãã£ãã«ããããŸãã cssãã©ã³ãžã·ã§ã³ãšååã¿ã°ã䜿çšãããšãæ£åžžã«æ©èœããŸãã
https://jsfiddle.net/z0nyfba0/
ã³ã³ããŒãã³ãã§v-model
ã䜿çšããå Žåãã³ã³ããŒãã³ãã¯v-model
䜿çšããã修食åãèªèã§ããŸããïŒ
ããšãã°ã input
ã€ãã³ããçºè¡ããã³ã³ããŒãã³ããããå Žåããã®ã€ãã³ãããã€çºè¡ããããã¯ã lazy
修食åã䜿çšãããŠãããã©ããã«ãã£ãŠç°ãªããŸãã
@fergaldoyleç§ã¯ããã§å°ãéãã ã®ã§ãããå
¥åã€ãã³ããæåã§change
ã€ãã³ããå
¥åã«ãã€ã³ãããå¿
èŠããããŸãïŒäŸïŒ https ïŒ
@calebboyd
https://jsfiddle.net/Linusborg/z0nyfba0/1/
enter-active-class
ãšleave-active-class
ã䜿çšããå¿
èŠããããŸã<router-view>
èŠçŽ ã«class="animated"
é
眮ããå¿
èŠããããŸãã@fergaldoyle 1.0ã®ããã¥ã¡ã³ãã«ãããšã lazy
ãv-modelã¯input
ã§ã¯ãªãchange
ã«åå¿ããã ãã ãšæããŸãã ããã䜿çšããŠåäœãå€æŽãã input
ãŸãã¯change
ãçºè¡ããŠã lazy
ãæå®ãããŠãããã©ããã«å¿ããŠç°ãªãçµæãåŸãããšãã§ããŸãã
ç°¡åãªv-for
äŸã§éãã§ããéãç§ã¯é ãæ©ãŸããŠããŸããã äœããã®çç±ã§ã2.0ã®select
èŠçŽ ã«å¯ŸããŠvalue
ãã€ã³ãã£ã³ã°ãæ©èœããŠããŸããïŒ https ïŒ
ãŸããããã¥ã¡ã³ãã§ã¯ã "i in 10"
ãããªv-forç¯å²ã¯ã1.0ã®ããã«0ã§ã¯ãªã1ããå§ãŸãããšã«æ³šæããŠãã ããã
@lauritzen
ããšãã°ãåçŽãªvã§éãã§ããéãé ããããŠããŸããã äœããã®çç±ã§ã2.0ã®äžéšã®èŠçŽ ã§å€ã®ãã€ã³ããæ©èœããŠããŸããïŒ https ïŒ
ç§ã«ãšã£ãŠã¯æåŸ ã©ããã«æ©èœããŠããããã§ãããäœãæ©èœããŠããªãã®ã§ããïŒ
ãã©ãŒã©ã ãŸãã¯gitterã§ãµããŒãã®è³ªåãããããšããå§ãããŸãã
ãã®åé¡ã¯ãæ°ããAPIã«é¢ããè°è«ã«éå®ããå¿ èŠããããŸãã ããã§ããŸããŸãªè³ªåã®ãµããŒããåŠçãããšãæã«è² ããªããªããŸãã
ããããšãã
vmã$ getãéæšå¥šã«ãªã£ãã®ã¯ãªãã§ããïŒ
代ããã«Vue.getã䜿çšããªãã®ã¯ãªãã§ããïŒ
ãã®ãããªèšç®ãããè¡šçŸãè©äŸ¡ããã®ã«éåžžã«äŸ¿å©ã§ãvar exp = 'entity.type.name' // this is generated in runtime
return vm.$get(exp)
@iagafonovããã圹ç«ã€ã·ããªãªã¯å€ããªããããã³ã¢ã®äžéšã«ããã¹ãã§ã¯ãããŸããã
ããã€ãã®ã·ããªãªã®1ã€ã«æ©èœãå¿ èŠãªå Žåã¯ãlodashãªã©ã䜿çšããŠåæ§ã®åäœãéåžžã«ç°¡åã«è¿œå ã§ããŸãã
import get from 'lodash/get';
Vue.prototype.$get = get
//in any component
var value = this.$get(this.someObject,'some.path.to.value')
ïŒãã¡ãããVue.getïŒïŒã®ããã«ãã¯ã©ã¹ã¡ãœããããšããŠè¿œå ããããšãã§ããŸãããŸãã¯ãå¿ èŠãªå Žæã«ããŒã«ã«ã«ã€ã³ããŒãããããšãã§ããŸããéžæããŠãã ããïŒ
@LinusBorgã ãŸã第äžã«ãç§ã¯lodashãŸãã¯ãã®ãããªãã®ã䜿çšããŸããã
第äºã«ãlodashã®å®è£
ã¯é
ãã§ããããã¯ãå®è¡æã«ãšã¯ã¹ãã¬ãã·ã§ã³æ§é ãæ·±ãæãäžããããšããããã§ãã vueã¯ãã¹ã³ãŒãã«ãã€ã³ãããããïŒparseExpressionã«ãã£ãŠïŒæ°ããæå®ãããé¢æ°ã«æºæ ããŸãã
ããã¯äºçŽ°ãªããšã§ã¯ãªãããããåå®è£
ããããšã¯éåžžã«å°é£ã§ãã
ãã¡ããã$ getã³ã³ãã€ã«é¢æ°ã¯æ¯åïŒã ããšãã°ãparseExressionãVue.utilã®apiã®äžéšã§ãããšäŸ¿å©ã§ãã
@iagafonov this.$get
ãå®è¡æã«ãã¹ã解æããå€ãåçã«ååŸããå¿
èŠããããŸãã ããããªããšããã¹ãååšããªãå Žåã«ãšã©ãŒãçºçããŸãã ãŸããã»ãšãã©ã®å Žåãããã©ãŒãã³ã¹ã®éãã¯ãããããã§ãã lodashãå¿
èŠãªãå Žåã¯ãä»ã«ãããããã®ãã¹æ€çŽ¢ã©ã€ãã©ãªããããŸãã ããã¯ãã¯ãVueã®æžå¿µã®äžéšã§ã¯ãããŸããã
çŸåšéæšå¥šã«ãªã£ãŠããparamå±æ§ã®ä»£æ¿æ¡ã¯äœã§ããïŒ
ãã£ã¬ã¯ãã£ãã®ãã©ã¡ãŒã¿ã«ã€ããŠè©±ããŠããã®ã§ããïŒ æ¬¡ã«ãvnodeãªããžã§ã¯ãå ã®ãã¹ãŠã®ãã€ã³ããããå±æ§ãèŠã€ããããšãã§ããŸã
<button v-test="123" color="red" type="button">click me</button>
bind (el, binding, vnode) {
// vnode.data.attrs -> { color: 'red' }
}
@sqal ãããã¯ç§ã®è³ªåãžã®åçã§ããïŒ ãããããªããç§ã¯æ æ°ãæ°ããããŠã³ã¹ãªã©ã®ãã©ã¡ãŒã¿å±æ§ã«ã€ããŠè©±ããŠããã ããšãã°ã2.0ããåã§ã¯ãããã<input type="text" v-model="msg" number>
ïŒæ°å€ã¯ããã§ã¯paramå±æ§ã§ãïŒã paramå±æ§ã䜿çšããã«åãçµæãåŸãã«ã¯ã©ãããã°ããã§ããïŒ
@ p-adamsæçš¿ã§èšåãããŠããŸã-ãããã¯ä¿®é£Ÿåã«ãªããŸãã<input v-model.number="msg">
Vue 2.0ã§ã¯ãå°éå
·ãå€æŽããããšãã¬ã³ããªã³ã°é¢æ°ãåžžã«åŒã³åºãããã®ã§ã2.0ã§åã¬ã³ããªã³ã°ãããã©ããã決å®ããããã«shouldComponentUpdate
ããµããŒããããã®ã§ã¯ãªãããšæããŸãã
@ yyx990803ããããŸãããä»ã¯The lazy and number params are now modifiers
æçš¿ã«è¡šç€ºãããŠããŸãã
@HeChenTaoEvanã¯ããã«ã€ããŠããã§å°ã説æããŸããhttps://medium.com/the-vue-point/announcing-vue-js-2-0-8af1bde7ab9#.pc5c8urbv
@HeChenTaoã¬ã³ããªã³ã°é¢æ°ã¯ãå¿ èŠãªå Žåã«ã®ã¿ãåžžã«ãåŒã³åºãããããã§ã¯ãããŸããã
shouldComponentUpdate
ã¯å¿
èŠãããŸãããmobxãšåå¿ããŠåãããšãè¡ãããšãã§ããŸãã shouldComponentUpdate
ãå®è£
ããå¿
èŠã¯ãªããšç¢ºä¿¡ããŠããŸãã ãã ããvueãšåæ§ã«ãmobxã¯å¯å€ç¶æ
ãèŠæ±ããŸãã äœããã®çç±ã§ãäžå€ç¶æ
ã®æŠå¿µã«åæããå Žåã ãã®å Žåãreactã¯shouldComponentUpdate
ããªãã®èäžãæã£ãŠããŸãã
ã€ãŸãã誰ããäžå€ã®ç¶æ ã䞻匵ããå Žåãvueã¯é©åã«äžèŽããªããšããããšã§ããïŒ
æ©èœã³ã³ããŒãã³ãã®ã³ã³ããã¹ãåŒæ°ã«ã¯ã children
ãšslots
ãŸãã children()
ãšslots().default
ããŸã£ããåãã§ããããšãç¥ã£ãŠãããšãå°ãæ··ä¹±ããŸãã æ£ããã¢ãããŒãã¯äœã ãããšæããŸãã ããããã¹ããããšããŠã®ãåäŸãã¯æ æ°ã§ãããããã§ãåãåäœãåŸã2ã€ã®ç°ãªãæ¹æ³ããµããŒãããã®ã¯ãªãã§ããïŒ
æ©èœã³ã³ããŒãã³ãã¯åãªãæ©èœã§ãããããåã¯ãããŸããã ç§èŠãåäŸãã¡ã¯éæšå¥šã«ãããã¹ãã§ãããæ æ°ã§ã¯ãªãããã«ã¹ããããç¶æããã ãã§ãã
@blocka mobxã«åå¿ããŠãªã¢ã¯ãã£ãããŒã¿ãå®è£ ã§ããŸããæ¬åœã§ãã ããããåå¿æ§ã¯Vueã®æ©èœã®äžæ žã§ãã ã§ãããããããèªåã®ãè¶ã§ã¯ãªãå Žåããã®äººã¯ééã£ãããŒãã£ãŒã«ããŸãã
@ miljan-aleksic children
ã¯çã§ãïŒã©ã®ã¹ãããã«å
¥ãå¿
èŠããããã«é¢ä¿ãªãããã¹ãŠã®ããŒããååŸããŸãïŒã slots
ã¯ãçä¿¡ããåã®slot
åã«åºã¥ããŠè§£æ±ºãããŸãã
ããããšã@ yyx990803ã ãã¶ããããã«ã€ããŠã®è©³çŽ°ã¯ããã¥ã¡ã³ãã§æ··ä¹±ãé¿ããã§ãããã@ chrisvfritzã
@ miljan-aleksicã¡ã¢ãè¿œå ããŸãã ð
ãã£ã«ã¿ã«é¢ããŠã¯ãèšç®ãããããããã£ã䜿çšããããšã¯ååã«ç°¡åã«æããŸãããvã¢ãã«ã§ãã£ã«ã¿ã䜿çšããå Žåã®åŠçââæ¹æ³ã å ¥åãã£ãŒã«ãã«å ¥åããŠååã®ãªã¹ãããã£ã«ã¿ãªã³ã°ãããå Žåã2.0ã§ãããã©ã®ããã«è¡ãããšãã§ããŸããïŒ
ããŒã¿ãã£ãŒã«ã/èšç®ãããããããã£ããã³ãã¬ãŒãã§äœ¿çšãããŠããªããšãã«Vueã«èŠåãããããšã«ã€ããŠã®èãã¯ãããŸããïŒ ããã«ã¯ããã€ãã®å¶éããããšæããŸãããäžèŠãªåºèã®èŒžå ¥åãäžèŠãªå Žæã«åŒãåºãäœè£ãããå Žæãç¥ã£ãŠãããšéåžžã«åœ¹ç«ã¡ãŸãã
@ yyx990803 ãã³ã³ããŒãã³ããããã¿ã€ããžã®$context
åç
§ã®èšå®ã«ã€ããŠã©ãæããŸããïŒ $parent
ãŸãã¯$root
ã®å Žåãšåãããã«ãçŸåš$vnode
ãªããžã§ã¯ããä»ããŠã®ã¿å©çšã§ããã³ã³ããã¹ãã«èªåèªèº«ãé »ç¹ã«ã¢ã¯ã»ã¹ããŠããããšã«æ°ä»ããŸããã
å®éãããã¯ã³ã³ããã¹ãã«ã¢ã¯ã»ã¹ããããã®ä¿¡é Œã§ããæ¹æ³ã§ã¯ãªãããã§ãã ã©ã®ããã«ãã¹ãã§ããïŒ
@ miljan-aleksicã³ã³ããã¹ãã«é »ç¹ã«ã¢ã¯ã»ã¹ãããŠãŒã¹ã±ãŒã¹ãå ±æã§ããŸããïŒ
@Kingdaroãã®ããã®åé¡ãéãããšãã§ããŸããïŒ å®çŸå¯èœã§ããã°ããã§ããã
@ p-adams Array.prototype.filter
èšç®ãããããããã£ãåŒãç¶ã䜿çšã§ããŸãã
@chrisvfritz ãåºæ¬çã«ã¯ãããšãã°åãæåŸ ããŠããã³ã³ããã¹ãã§å€æ°ãèšå®ãããªã©ã®åé¿çã ãŸãã¯ãVueèªäœãè¡ããããåã«ã³ã³ããŒãã³ããžã®åç §ãèšå®ããŸãã
ç§ã¯ãã¹ãŠã®äººã«å ±éããŠããããã§ã¯ãªãããšã«åæããŸãããå°ãªããšãã³ã³ããŒãã³ãå ã§ããã«ã¢ã¯ã»ã¹ããããã®ä¿¡é Œã§ããæ¹æ³ãããã¯ãã§ãã $ vnodeã¯ããã³ãã¬ãŒãã䜿çšãããšãã«ã³ã³ããŒãã³ããããŠã³ãããããŸã§ååšããŸããïŒå°ãªããšããããŸã§ã®ãšããç§ã®çµè«ïŒã
é©åãªæ¹æ³ã§ã¢ã¯ã»ã¹ããæ¹æ³ãç¥ã£ãŠãããšæºè¶³ããŸãã
$context
ã圹ç«ã€ãã1ã€ã®ç¶æ³ã¯ãããã³ã³ããŒãã³ããå¥ã®ã³ã³ããŒãã³ãã®ã«ãŒããšããŠåå©çšããå Žåã§ãã
<template>
<Foo>
<child/>
</Foo>
</template>
<script>
{ name: 'Bar' ... }
</script>
ãã®äŸã§ã¯ã child.$parent
ã¯Barã®ä»£ããã«ã³ã³ããŒãã³ãFooãè¿ããŸããããã¯æ£ããã§ããã芪ãšåãçžäºã«äŸåããŠããå Žåããããã®éã®çŽæ¥éä¿¡ã¯ã³ã³ããã¹ããä»ããŠè¡ãããšãã§ããŸãã
@ miljan-aleksicããã¯@ yyx990803ã«ä»»ããŸãã ç§ã¯ãšã®ãããªãã®ã ãšæããŸã$parent
ããããã«éãã $context
ããããæéã®ééã£ãæ¹æ³99.9ïŒ
ã«ãªããŸãããç§ã¯ããããããã䜿çšããªããšæããŸãã
v-show
ãšãã©ã³ãžã·ã§ã³ã®ç¶æ³ããããŸãã ãã®ã·ããªãªã§ã¯ãããã©ã«ãã§CSSã«ãdisplayïŒnoneããšããã¢ãŒãã«ããããŸãã v-show
ãšçµã¿åããããšããã£ã¬ã¯ãã£ããdisplayããããã£ãåé€ããããã衚瀺ãããªããªããCSSããããã£ãä¿æãããŸãã CSSïŒãããžã§ã¯ãèŠä»¶ïŒãå€æŽã§ãããVueãã©ã³ãžã·ã§ã³ãç¹ã«CSSã«äŸåããŠããããã«èŠãããããã«ã¹ã¿ã ãã£ã¬ã¯ãã£ãã䜿çšã§ããŸããã
ç§ã¯ä»ãv-showã®çŽåŸã«è©äŸ¡ãããã£ã¬ã¯ãã£ããdisplayããããã£ãblockã«èšå®ã§ãããšèããŠããŸãã ãããè©Šãå¿ èŠããããŸããããšã«ããã衚瀺ããããã¯ãŸãã¯ã€ã³ã©ã€ã³ãããã¯ã«èšå®ã§ããããã«v-showã«ä¿®é£Ÿåãè¿œå ããããšããå§ãããŸãã ã¡ãã£ãšããèãã
@chrisvfritz ãæ©èœã³ã³ããŒãã³ãã®å Žåã芪åç §ã¯ã¹ããããšããŠäœ¿çšãããŠããçŽæ¥ã®èŠªã§ã¯ãªãã代ããã«ã³ã³ããã¹ãã³ã³ããŒãã³ãã§ãããšäºæ³ãããŸããïŒ
2.0.0-beta7ã§ã<ãïŒããã³å Žåã«ãã£ãŠã¯ä»ã®HTMLã«äŸåããæåïŒãå«ãŸããŠãããšããã³ãã¬ãŒãã®ã³ã³ãã€ã«ã倱æããŸãã
https://jsfiddle.net/x0r59ur1/
ããã¯1.0.26ã§æ©èœããŸããã
ã<ããã<ãã§ãšã¹ã±ãŒããããšãåé¡ã解決ããŸãã
@GlurG ã<ããé©åã«ãšã¹ã±ãŒãããããšãæåŸ ãããŸãã
@ yyx990803 ãåãã¿ã€ãã®ã³ã³ããŒãã³ãã®ãªã¹ãã§ãã©ã³ãžã·ã§ã³ã䜿çšããŠãã®ç¶æ ãç¶æãããå Žåãã©ã®ããã«ããã°ããã§ããïŒ ããã¥ã¡ã³ãã«ç¶ããŠãç§ã¯ã³ã³ããŒãã³ããç°ãªãå Žåã«ã®ã¿ã©ã®ããã«èŠãããã確èªããŸãã
ã¿ãã³ã³ããŒãã³ããšèšã£ãŠããã®ã¢ã€ãã ãé·ç§»ãããŸãããã æ¹æ³ãèŠã€ãããŸãã:(
<tabs>
<transition>
<tabs-item>Content 1</tabs-item>
<tabs-item>Content 2</tabs-item>
<tabs-item>Content 3</tabs-item>
<transition>
</tabs>
@ miljan-aleksic <transition>
ã¯åäžèŠçŽ å°çšã§ãã è€æ°ã®ã¢ã€ãã ã«ã¯<transition-group>
ãå¿
èŠã§ãã
@ yyx990803 ããããè©ŠããŸãããããããéæããæ¹æ³ãããããŸããã é·ç§»ã°ã«ãŒãã¯èŠçŽ ãè¿œå /åé€ããããšã§æ©èœããŸãããããããŠããéãã³ã³ããŒãã³ãã¯åã³åæåãããç¶æ ã倱ãããŸãã ã¿ãã®æŠå¿µã®ã»ãã«ãäžåºŠã«1ã€ã®ã³ã³ããŒãã³ãã®ã¿ã衚瀺ããããšã§ãããæ£ç¢ºã«ã¯ãªã¹ãã§ã¯ãããŸãã:)
@ yyx990803 ã ããããšãããããŸããã解決çã¯æããã§ã¯ãããŸããã ãã©ã³ãžã·ã§ã³ãã©ã®ããã«é©çšãããããç¥ã£ãŠããŸãããç§ãç解ã§ããªãã®ã¯ããã©ã³ãžã·ã§ã³ãããã³ã³ããŒãã³ããkeep-alive
ããæ¹æ³ã§ãã
ã³ã³ããŒãã³ããæ¯åã©ã®ããã«äœæããããã«ã€ããŠã®jsfiddleã®äŸã䜿çšããŠãããããããããããã«æ°ããåé¡ãäœæããŸããã
@ yyx990803 ãããŒãã¢ã©ã€ãæ©èœãæ¹åããŠããã ãããããšãããããŸããæåŸ ã©ããã«æ©èœããããã«ãªããŸããã
ããªãã¯æåéãç§ã®äººçãå€ããŠããŸããããªãã®è£œåãšåŽåå«çã«ãã£ãŠãç§ã¯é·ãéåŸ æ©ããŠãã補åãåŠã³ãæ§ç¯ããæäŸããããšãã§ããŸãã ã·ã³ãã«ãªã¢ãããŒãã§ã誰ãããã€ãã¯ãå©çšããŠæ§ç¯ã§ããŸãã ãã以äžã«ãç§ã¯æ°žé ã«æè¬ããŠããŸãã
@ miljan-aleksicPatreonãã£ã³ããŒã³ã®ãŠã£ã³ã¯ãŠã£ã³ã¯ããããŸãã
ããªãã¯@phananãäœã§ããããç¥ã£ãŠã
ready
ã©ã€ããµã€ã¯ã«ããã¯ã¯å»æ¢ããã mounted
ãåªå
ãããŸãã ãã ããå€æŽãã°ã«ãããšãããŠã³ããåŒã³åºãããåã«ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããããšããä¿èšŒã¯ãããŸããã ããã«ãããã³ã³ããŒãã³ãã®åæååŸã«ç¹å®ã®jqueryã³ã³ããŒãã³ãïŒselectizeãªã©ïŒãåæåãããšãã«æ£çºçãªãšã©ãŒãçºçããŸãã 代ããã«ã©ã®ã©ã€ããµã€ã¯ã«ããã¯ã䜿çšããå¿
èŠããããŸããïŒ ãæºåå®äºãããã¯ã¯æ¬¡ã®ããã«ãšãã¥ã¬ãŒãã§ããŸããïŒ
function mounted() {
Vue.nextTick(() => {
//...
});
}
@GlurGã¯ããåäœããŸãã ã¡ãªã¿ã«ãããã¯å€ãã®å Žå1.0ã§ready'()
å¿
éåã§ããããŸããã
ãšã«ããããã«ããã¯ããªãçç±ã¯ãããŸããïŒ ç§ãããŸãã
ããã暪åã£ãŠ... 1.0ã§ãããããŠrafã§ã«ãŒããããããªãã®ã«é ŒããŸãã
ããŒã ãªã©ã«ããã確èªããŠãã ããã
2016幎8æ10æ¥18:26ããThorstenLÃŒnborgã [email protected]
æžããŸããïŒ
@GlurG https://github.com/GlurGã¯ããåäœããŸãã ãšããã§ã
å€ãã®å Žåã1.0ã§ã¯ready 'ïŒïŒãå¿ èŠã§ãããâ
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/vuejs/vue/issues/2873#issuecomment -238903012ããŸãã¯ãã¥ãŒã
ã¹ã¬ãã
https://github.com/notifications/unsubscribe-auth/AACounAoI8p65soUUrbdaiwteDXKgMGJks5qee25gaJpZM4IedHC
ã
ã¬ã³ããªã³ã°é¢æ°ã䜿çšããå Žåãã³ã¢ãã£ã¬ã¯ãã£ãã¯ç¡èŠãããŸããããã¯åççã§ãã ãã ããIE9ã®åé¿çããããããããä»ã®ãšããžã±ãŒã¹ã®åé¡ã解決ããv-model
ããã«ããã¬ãŒã³jsã䜿çšããŠåçŸããã®ã¯ããã»ã©ç°¡åã§ã¯ãªããã®ããããŸãã
代ããã«ãã³ãã¬ãŒãã䜿çšããããšãåæ€èšããŸãããããã¯äžå¯èœã§ããããç¶æ³ã«ãã£ãŠã¯æè¯ã®ãªãã·ã§ã³ã§ãã ããã¥ã¡ã³ãã¯ããã®ãããã¯ã«é¢ããããå€ãã®ã¬ã€ãã³ã¹ã確å®ã«æäŸããå¯èœæ§ããããŸããããã«ããããã®äžè¬çãªç¶æ³ã解決ãããã³ãã¬ãŒããèŠéããªãããã«ããããã«ãã¬ã³ããªã³ã°é¢æ°ãæäœãããšãã«ãã«ããŒãçšæããããšããå§ãããŸãã
@ miljan-aleksicç³ãèš³ãããŸããããã³ã¡ã³ãã¯v-showãŸãã¯ã«ã¹ã¿ã ãã£ã¬ã¯ãã£ãã§ã®ã¿æ©èœããããšã«æ°ä»ããã®ã§åé€ããŸãããv-modelã®å Žåã¯ãå ¥å/å€æŽãªã¹ããŒãè¿œå ããŠããŒã¿ãæåã§æŽæ°ããå¿ èŠããããŸãã
æ°ããactivated
ã«ãŒããã¢ã¯ãã£ã/ããŠã³ãããããšã解éããããšãã«åŒã³åºãããããšã«ãªã£ãããã¯router-view
ïŒ çŸåšããã®åäœã¯èŠãããŸããã
@wpraterããããããã¯<keep-alive>
ã®ã¿é¢é£ããŠãããä»ã«ã¯äœããããŸããã
@ yyx990803ã«ãŒã¿ãŒãã¥ãŒãããŒãã¢ã©ã€ãã§ã©ããããŠããŸãããåã®ãã¥ãŒã«æ»ããšãã«ããã¯ãèŠã€ãããªãããã§ãã mounted
ãactivated
ãåŒã³åºãããŸããã domãã¬ã³ããªã³ã°ãããŠããããšã確èªããå¿
èŠããããŸãã
@wpraterã¯ãç¡é¢ä¿ãªè³ªåã«ãã®ã¹ã¬ããã䜿çšããªãã§ãã ããã ãã°ãããå Žåã¯ã察å¿ãããªããžããªã§åé¡ãåçŸããŠãã¡ã€ã«ããŠãã ããã
Vue JSXã¯ãªããžã§ã¯ãæ¡æ£æŒç®åããµããŒãããŠããŸããïŒ è©ŠããŸããããããŸããããŸããã
ããã¯æ©èœãã @ yyx990803ã¯ãããæ©èœãããããã«å€å€§ãªåªåãæããŸããã
ç§ã¯ããã<Component {...{ props } }></Component>
ããŠãããææžåãããŠãããšããã«æ©èœããŸãã
@blockaããããšãïŒ ããããã£åprops
ã¯å¿
èŠãªããšæããŸããð
@ yyx990803
components
ãªãã·ã§ã³ã¯é
ååããµããŒãããŠããŸãããã1.xã§ã¯æ©èœããŸãã
äŸãã°
var Parent = Vue.extend({
name: 'parent',
template: '<div><slot></slot></div>'
})
var Child = Vue.extend({
name: 'child',
template: '<span>hello</span>'
})
new Vue({
el: '#app',
components: [
Parent,
Child
],
replace: false,
template: '<parent><child></child></parent>'
})
ãã°ã§ããïŒ
@ QingWei-Liæ£åŒã«ææžåãããæ©èœã§ã¯ãªãã£ãããããããã¯ãµããŒããããªããªããŸããã ãã®çç±ã¯ãES2015ã§ã¯components: { Parent, Child }
æžãããšãã§ããããã§ãã
ã¡ãã£ãšããææ¡ã
v-foreach
ã䜿çšããç¯å²ã«ã¯v-for
ã䜿çšãããéåžžã®é
åå埩ã®å¯èœæ§ã¯ãããŸããã
ããã¯ãphpããæ¥ããŠãŒã¶ãŒã«ãšã£ãŠããæå³ããããJQã®.each
ãŸãã¯JSã®foreach
ãšäžèŽããŸãã
@ ctf0ç§ãã¡ã¯RCã¹ããŒãžã«ãããAPIã¯ããå€æŽãããŸããã ãŸããåãããšãè¡ãããã®ä»£æ¿æ§æã玹ä»ããŸããã
v-for="item in items"
ã®ç²Ÿç¥çãªãªãŒããŒãããã¯ããããæ£åœåããã»ã©éèŠã§ã¯ãªããšæããŸãã
ãã®æ°ããããŒãžã§ã³ã§ã¯ããã®ã±ãŒã¹ãåŠçããŸãã
å€å žçãªããã¹ãå ¥åã䜿çšãã人éã®åœ¢åŒïŒããšãã°ãã2016幎7æ10æ¥ããªã©ïŒã§æ¥ä»ã衚瀺ããã«ã¬ã³ããŒã³ã³ããŒãã³ãïŒã»ãã³ãã£ãã¯UIããååŸïŒããããŸãã v1.0ã§ã¯ãåæ¹åãã£ã«ã¿ãŒã䜿çšããŠãã®æååãé©åãªæ¥ä»ã«å€æãããªããžã§ã¯ãããŒã¿ãçŽæ¥éä¿¡ã§ããããã«ããŸããã ãããããã£ã«ã¿ãŒã¯v-modelã§æ©èœããªããªã£ãã®ã§ãv2.0ã§åãããšãè¡ãã«ã¯ã©ãããã°ããã§ããïŒ
ããããšã
@shadowRRããã€ãã®ã³ãŒããèŠãããšãã§ããŸããïŒ
@ p-adamsãã¡ããã§ãã ã©ããã
ãŸããç§ã®ã«ã¬ã³ããŒå ¥åçšã®vã¢ãã«ã§äœ¿çšãããŠãããã£ã«ã¿ãŒã å¯äžã®ç®çã¯ãå€ãå€æŽããããšãã«ãé©åãªæ¥ä»ã¿ã€ããããŒã¿ã«æžã蟌ãããšã§ãïŒpostgresdateïŒã
Vue.filter( 'formatDate', {
read( date ) {
return date;
},
write( date ) {
if( !date ) return null;
return moment( date, 'D MMMM YYYY' ).format( 'YYYY-MM-DD' );
}
} );
ãããŠãç§ã¯ããªããç§ã®ã³ã³ããŒãã³ãã§ãã®ããã«ããã䜿çšããŸããïŒå ¥åã«ã¯äººéãèªãã圢åŒã§ç§ã®æ¥ä»ãè¿ãã«ã¬ã³ããŒã·ã¹ãã ããããŸãïŒ
<div class="required field">
<label>Start date</label>
<div class="ui calendar">
<div class="ui input left icon">
<i class="calendar icon"></i>
<input v-model="section.start | formatDate" type="text">
</div>
</div>
</div>
ç§ã¯ããªãã話ããŠããæçš¿ãéããŸããããããèŠãã€ããã§ããããããšã;ïŒ
ããã«ã¡ã¯ã
æ°ããã©ã€ããµã€ã¯ã«ããã¯ã«ã¯çåããããŸãã
ããŠã³ãæã«ã€ãã³ããã³ãã©ãŒãç»é²ããã¢ã³ããŠã³ãããåã«ç»é²ã解é€ããå Žåãã©ã®ããã«æ©èœãããå¿
èŠããããŸããïŒ äœæãããããã¯ãšbeforeDestroyããã¯ã«ãã§ãã¯ãšããžãã¯ãè¿œå ããŸããïŒ
Vue 1.xã§ã¯ãåãä»ããããããã¯ãšåãå€ãããããã¯ã䜿çšããŸãã
ãããã2.0ã«ã¯ããŠã³ããããããã¯ããããŸãããã¢ã³ããŠã³ããããããã¯ã¯ãããŸããã å°ã察å¿ããŠããªãããã«æããŸãã
ã¢ã³ããŠã³ãããã¯ãæäŸãããŠããªãçç±ã¯ãããŸããïŒ
@ f15gdsy mounted
ã¯destroyed
察å¿ããŸãã 2.0ã«ã¯attached
/ detatched
ã«ãŠã³ã¿ãŒããŒãã¯ãããŸãããèªåã§å
éšãã§ãã¯ãè¡ãå¿
èŠããããŸãã ã€ãã³ããin-dom / off-domãæ°ã«ããªãå Žåã¯ã mounted
ãšbeforeDestroy
ãé©åãªå Žæã§ãã
ã«ã¹ã¿ã ã³ã³ããŒãã³ãã§äœ¿çšãããšãv-onã¯ãã®ã³ã³ããŒãã³ãããéä¿¡ãããã«ã¹ã¿ã ã€ãã³ãã®ã¿ããªãã¹ã³ããããã«ãªããŸããã ïŒDOMã€ãã³ãããªãã¹ã³ããªããªããŸããïŒ
ããã§ããã€ãã®æçš¿ãèŠéãããããããŸãããããã®èåŸã«ããèšèšäžã®æ±ºå®ã¯äœã§ããïŒ
ããã«ãããã³ã³ããŒãã³ãã§ã®åçŽãªã¯ãªãã¯ã€ãã³ãã®ãã€ã³ããéåžžã«åé·ã«ãªããŸãã
1.0ïŒ
<foo @click="bar"></foo>
2.0ïŒ
<div @click=bar>
<foo></foo>
<div>
@fnlctrl ããã€ãã£ã修食å@click.native="bar"
ãŸãã
@ miljan-aleksicããããšãããããŸããïŒ ãã®åé¡ã§ã¯ããã®ä¿®é£ŸåãDirectives
-> v-on
-> modifiers
ã«è¿œå ããå¿
èŠããããšæããŸã
ãµãŒããŒãšããŠKoaïŒ1.xãŸãã¯2.xïŒã䜿çšã§ããŸããïŒ Koaã®vue-server-renderer
åé¡ã¯ãããŸããïŒ
@ yyx990803
import Vue from 'vue'
Vue.component('expanding', {
functional: true,
render (createElement, { children }) {
const data = {
props: {
name: 'expanding',
},
on: {
beforeEnter ($el) {
$el.classList.add('collapse')
console.log('beforeEnter')
},
enter ($el) {
$el.classList.remove('collapse')
$el.classList.add('collapsing')
$el.style.height = `${$el.scrollHeight}px`
console.log('enter')
},
afterEnter ($el) {
$el.classList.remove('collapsing')
$el.classList.add('collapse', 'in')
console.log('afterEnter')
},
beforeLeave ($el) {
$el.classList.add('collapsing')
$el.classList.remove('collapse', 'in')
$el.style.height = 0
console.log('beforeLeave')
},
leave ($el) {
console.log('leave')
},
afterLeave ($el) {
$el.classList.remove('collapsing')
$el.classList.add('collapse')
$el.style.display = 'none'
console.log('afterLeave')
}
}
}
return createElement('transition', data, children)
}
})
<a href="#" :aria-expanded="showItem ? 'true' : 'false'" @click="showItem = !showItem">
<span class="icon is-small"><i class="fa fa-table"></i></span>
Tables
<span class="icon is-small is-angle"><i class="fa fa-angle-down"></i></span>
</a>
<expanding appear="true">
<ul v-show="showItem">
<li>
<router-link to="/tables/basic">Basic</router-link>
</li>
<li>
<router-link to="/tables/handsontable">Handsontable</router-link>
</li>
</ul>
</expanding>
ãšã³ã¿ãŒããã¯ãåŒã³åºããªãã®ã¯ãªãã§ããïŒ
@fundonãã©ãŒã©ã ãŸãã¯gitterãã£ããã§è³ªåããå¿ èŠããããŸã
ãã®ã¹ã¬ãããããã¯ããçç±ïŒ
ãã°ãããå Žåã¯ãåé¡å ±åã¬ã€ãã«åŸã£ãŠå¥ã®åé¡ãéããŠãã ããã質åãããå Žåã¯ããã©ãŒã©ã ãŸãã¯Gitterã䜿çšããŠãã ããã
æŽæ°ïŒ2.0ã§ã®å€æŽã®ããæ確ã§è©³çŽ°ãªãªã¹ãã«ã€ããŠã¯ãæ°ãã移è¡ã¬ã€ããåç §ããŠ
æãåèã«ãªãã³ã¡ã³ã
@chrisvfritz @Uninenä¿®æ£ïŒVuex2.0ã¯Vue1.xã§ãæ©èœããŸãã
vue-router
次ã®ã¡ãžã£ãŒããŒãžã§ã³ã¯Vue2.xã®ã¿ããµããŒãããŸãã