ãã®æ©èœã¯æå³çã«åé€ããããšæããŸãããå Žåã«ãã£ãŠã¯éåžžã«äŸ¿å©ã§ãã ããããããããªãã·ã§ã³ã«ããŠããããå ã«æ»ããªãã®ã¯ãªãã§ããïŒ
å®éã®ãŠãŒã¹ã±ãŒã¹ã¯ãããŸããïŒ
å°ããªãŠãŒã¹ã±ãŒã¹ã§ã¯ããã¹ãŠãã°ããŒãã«ã«ç»é²ããã ãã§ãã 倧èŠæš¡ãªã¢ããªã§ã¯ãåã³ã³ããŒãã³ããå¿ èŠãªãã®ã«æ瀺çã«äŸåããæ¹ãã¯ããã«ä¿å®ãããããªããŸãã ç¶æ³ã«ãã£ãŠã¯åœ¹ç«ã€ãããããŸããããã¡ãªããã«ã¯ã°ããŒãã«ãªãã¬ãŒããªãã䌎ããŸãã 1.0ã®èåŸã«ããèãæ¹ã¯ããäœããã»ãã®ããããã圹ã«ç«ããªãå ŽåããŸãã¯ä¿å®æ§ã«æªåœ±é¿ãäžããå Žåã¯ããããåé€ããŸãããããšãããã®ã§ãã
ããã ç§ã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯ãã«ã¹ã¿ã ãšãã£ã¿èŠçŽ ã®è€éãªæ§é ãæã€ãããã¢ãããŠã£ã³ããŠããããŸãã ãããã®èŠçŽ ã¯3ã4ã¬ãã«ã®éå±€ã§çµã¿åãããããšãã§ããããã芪èŠçŽ ããšã«æ瀺çã«å®£èšããã®ã¯éå¹ççã§ãïŒ3ã5ã®èŠªã¿ã€ã* 10ã®å®£èšãããèŠçŽ = 50è¡ã®ç¹°ãè¿ãã³ãŒãïŒã ãŸããã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåã«ã¯è¡šç€ºãããªããããã°ããŒãã«ã«ç»é²ããããšããå§ãããŸããã ã ããç§ã¯ãããããããŒã«ã«ã«ãããŒãããŠãããããã§ãã
ããããæ瀺çã«ã€ã³ããŒãããããšã¯ãããããã®ããç¹°ãè¿ãã§ãã ããã«ããããã®éå±€å ã®ä»»æã®ã³ã³ããŒãã³ãã ãã調ã¹ãŠããã®äŸåé¢ä¿ãã©ãããæ¥ãŠããã®ããç解ã§ããŸãã æé»çãªãã©ãŒã«ããã¯ã䜿çšãããšã3ãæåŸã«éå±€å ã®ã©ãã«ãããã®ã³ã³ããŒãã³ããã€ã³ããŒãããããæãåºããªããªããŸãã
@ yyx990803è¯ãæãåºããããŸããããããšãã ãããã£ãŠãç§ã®ã¢ããªã¯2ã€ã®éåžžã«ç°ãªãéšåã§æ§æãããŠããããããããåºæã®æ確ã«å®çŸ©ãããã³ã³ããŒãã³ãã®ã»ãããç»é²ããŠããããšãæãåºããŸãã ãããã£ãŠãã¢ã»ãããããŒãããå ŽæãéžæããããšæããŸãïŒã«ã¹ã¿ã ãã£ã¬ã¯ãã£ããšãã£ã«ã¿ãŒã«ãåãããšãèµ·ãã£ããšæããŸãïŒã
ç§ã®å°è±¡ãå ±æãããŠãã ããã ç§ã¯0.12.xã§äœæ¥ããŸããããéåžžã«ããŸããããŸããïŒããã€ãã®ãã€ããŒãªåŠç¿æ²ç·ãé€ããŠïŒã æå°éã§ã¯ãªãŒã³ãªAPIãæ§æãä¿¡é Œæ§ã®é«ãã³ãŒãã çŸåšã1.0.0ããŒã¿çã§ãããæªåããŸããããè¯ãã¯ãããŸããã ããå€ãã®ã³ãŒãã®ç¹°ãè¿ããç§ã䜿çšããæ©èœãåé€ãããåãã³ãŒããäœåºŠãæžãçŽããŸããã å°æ¥ãé倧ãªå€æŽãæéã®ç¡é§ããªããªããã©ããããããªããããReactã§ã¯ãªãVueãéžæããã®ãééãããšæãå§ããŠããŸãã
@karevn
strict: true
ãããã©ã«ãã«ããã®ã§ã¯ãªãããã®æ©èœãæäŸããæ¢åã®ã³ãŒããåé€ããŠãæå³ããããŸããã 奜ã¿ã¯ç°ãªããäžéšã®äººã
ã¯ããã©ãŒã«ããã¯ãã¢ãããŒãã奜ãã§ããããããã¯æã
ããçŽæçã§ãã ç¹ã«ãã³ã³ããŒãã³ããåçã«ããŒããããå Žåã ããã¯ã¹ã€ã³ããã¡ã¯ããªãŒãªã©ã§åé¿ã§ããŸããããã¹ãŠè²ŽéãªæéãããããŸããoptions.strict = true
ãèšå®ãããŠãããããäžæããªãå¯èœæ§ããããŸããã¯ããã¢ããã°ã¬ãŒãã«ã¯åžžã«ãªãã¡ã¯ã¿ãªã³ã°ã®èŠçã䌎ããŸãããVueããããã®ã¬ã¬ã·ãŒæ§æãªãã·ã§ã³ãã解æŸãããå¯äžã®ãã£ã³ã¹ã¯1.0ã§ãã 1.0以éã¯å³å¯ã«semverã«ãªãã2.0ãŸã§å£ããããšã¯ãããŸããã ãããŠãããªãã話ããä¿¡é Œæ§ã®åé¡ã®ããã«ã1.xãã§ããã ãé·ãæç¶ãããããšæããŸãã
å³å¯ãªã¢ãŒãã«é¢ããŠïŒããªããããã«å€§ããäŸåããŠãããšããããã¯ç¢ºãã«ãªãã¡ã¯ã¿ãªã³ã°æéãèŠããŸã-ãããçæ³çã«ã¯1.0以éã®Vueãæã«å
¥ããæ°ãããŠãŒã¶ãŒã«ãšã£ãŠã圌ãã¯ãã®ããšãååšããããšããç¥ãå¿
èŠã¯ãããŸããã APIãµãŒãã§ã¹ã¯å¯èœãªéãå°ããããå¿
èŠããããã°ããŒãã«ãªæ§é åãã¿ãŒã³ã¯å¯èœãªéãäžè²«ããŠããå¿
èŠããããŸãã å³å¯ã¢ãŒããç¡å¹ã«ã§ããããã«ããããšã§ãåºæ¬çã«2ã€ã®ç°ãªãã¹ã¿ã€ã«ã®Vueã¢ããªã®æ§é åãä¿é²ãããŸã- strict: true
ã䜿çšãã1ã€ã®ã¢ããªã§äœæ¥ãã strict: false
ã䜿çšããå¥ã®ãããžã§ã¯ãã«ç§»åããããšãæ³åããŠãã ãã...éçºè
ã®çµéšã®æçåããããŠç§ã¯ãã®å¯èœæ§ãåãé€ããããšæã£ãŠããŸãããããŠ1.0ã¯ãããããããã®å¯äžã®åççãªå Žæã§ãã
ãã®ç§»è¡ã®éäžã§ããªããæãŸãã®ã¯ã¡ãã£ãšäžå¹žã§ãããããŠç§ã¯ããªãã®ãã£ãŒãããã¯ã«æè¬ããŸãã ãããããããªããã°ãªããªãããšã¯ãããªããã°ãªããŸããã
@ yyx990803ç§ã¯ã¡ãã£ãšç«ã¡åŸçããŠããå ·äœçãªãŠãŒã¹ã±ãŒã¹ãèŠãããšãã§ããŸãã
ç§ãããããšããŠããããš
ç§ã¯æ¡åŒµå¯èœãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŸãïŒãŠã£ãžã§ããã§æ¡åŒµå¯èœã§ãã ãŠã£ãžã§ããã¯ãéçºè ãå®çŸ©ããã¢ããªã±ãŒã·ã§ã³ã®äžéšã§ãããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ããã©ã°ã€ã³ããŠãããæç¹ã§æ¡åŒµããŸãã ã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«åçã«ããŒããããŸãã ã¢ããªã±ãŒã·ã§ã³ã®åã€ã³ã¹ã¿ã³ã¹ã¯ç°ãªããŠã£ãžã§ããã®ã»ãããæã€ããšãã§ããã¢ããªã±ãŒã·ã§ã³ã®2ã€ã®ã€ã³ã¹ã¿ã³ã¹ã¯åãããŒãžã«ååšã§ããŸãã
ããŒãããããšããŠã£ãžã§ããã¯åçã«äœæãããã³ã³ããŒãã³ããvuejsã¢ããªã±ãŒã·ã§ã³ã«è¿œå ããŸãã
ãŠã£ãžã§ããã«ã¯ä»ã®ãŠã£ãžã§ããïŒåïŒãå«ããããšãã§ããŸãããã®éšåã¯ã¢ããªã±ãŒã·ã§ã³ã®ããŒãåŸã«ãŠãŒã¶ãŒã«ãã£ãŠç®¡çããããããèµ·åæã«ã©ã®ããã«ãªããã¯ããããŸããã ãã®ããããŠã£ãžã§ããã¯ãäºããèªèããä»ã®ãŠã£ãžã§ãããç»é²ããå¿
èŠããããŸãã
åé¡
ãããã®ãŠã£ãžã§ãããã°ããŒãã«ã«ç»é²ããããšã¯é¿ãããïŒäºææ§ã®çç±ïŒã
ã³ã³ããŒãã³ãã¯åçã«æ§ç¯ããã³ããŒãããããããåãå«ãããšãã§ããåã³ã³ããŒãã³ãã«ãã¹ãŠã®ã³ã³ããŒãã³ããç»é²ããå¿
èŠããããŸãã ããã¯ã䜿çšãããªãå¯èœæ§ã®ããå€ãã®ç»é²ãè¡ããŸãã ç§ãäœãæå³ããããèŠãŠãã ããïŒä»ã®ãšãããã³ã³ããŒãã³ãã®ããŒã«ã«ç»é²ãè©Šã¿ãŠããããã°ããŒãã«ç»é²ã§ãã¹ããè¡ã£ãŠããããšã«æ³šæããŠãã ããïŒïŒ
var components = {
appComponents: {
template: "...",
components: components
},
appComponents2: {
template: "...",
components: components
},
widgetComponents: {
template: "...",
components: components
},
widgetComponents2: {
template: "...",
components: components
},
}
ãããè¡ããšãã«ããã©ãŒãã³ã¹ã®ããã«ããã¯ã¯ãããŸããïŒ
ãã®ããããã»ãã°ããŒãã«ãã³ã³ããŒãã³ãã®ã¹ã³ãŒãã圹ç«ã€ãšæããŸãã ã«ãŒãã³ã³ããŒãã³ããšåã³ã³ããŒãã³ãããã³ã³ããŒãã³ãã«å°éã§ãããã³ã³ããŒãã³ãã®ç¯å²ãéããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ãããšåœ¹ç«ã€å ŽåããããŸãã ããããä»ã®vuejsã®ã«ãŒãããã§ã¯ãããŸããã ã©ãæããŸããïŒ
ã°ããŒãã«ç»é²ã¯ååž°çã«ç»é²ãããã®ã§ã¯ãªãã
ã³ã³ããŒãã³ãèªäœã§ããããã®äžã®ã³ã³ããŒãã³ãã§ã¯ãããŸããã components
ãªãã·ã§ã³ã§ãã ã ããç§ã¯æšæž¬ããŸã
åé¡ã¯ãããŸããã§ããã
2016幎8æ22æ¥æææ¥ã16ïŒ00 [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
@ yyx990803https ïŒ//github.com/yyx990803å ·äœçãªãŠãŒã¹ã±ãŒã¹ãèŠãããšãã§ããŸã
ç§ã¯ã¡ãã£ãšç«ã¡åŸçããŠããŸãã_ç§ãããããšããŠããããš_
ç§ã¯æ¡åŒµå¯èœãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŸãïŒãŠã£ãžã§ããã§æ¡åŒµå¯èœã§ãã ãŠã£ãžã§ããã¯
ã¢ããªã±ãŒã·ã§ã³ã®éçºè å®çŸ©ã®éšåãããã¯åçã«ããŒããããŸã
ã¢ããªã±ãŒã·ã§ã³ã®èµ·åã ã¢ããªã±ãŒã·ã§ã³ã®åã€ã³ã¹ã¿ã³ã¹ã¯
ãŠã£ãžã§ããã®ç°ãªãã»ãããããŒãããããšããŠã£ãžã§ããã¯åçã«äœæãããã³ã³ããŒãã³ããã«è¿œå ããŸã
vuejsã¢ããªã±ãŒã·ã§ã³ã
ãŠã£ãžã§ããã«ã¯ä»ã®ãŠã£ãžã§ããïŒåïŒãå«ããããšãã§ããŸããããããã©ã®ããã«è¡ããããã¯ããããŸããã
ãã®éšåã¯ãŠãŒã¶ãŒã«ãã£ãŠç®¡çããããããèµ·åæã«ãªããŸã
ã¢ããªã±ãŒã·ã§ã³ãããŒããããŸãã ãã®ããããŠã£ãžã§ããã¯ãäºããèªèããå¿ èŠããããŸãã_åé¡_
ãããã®ãŠã£ãžã§ãããã°ããŒãã«ã«ç»é²ããããšã¯é¿ãããã§ãã
ãŠã£ãžã§ããã¯åçã«èªã¿èŸŒãŸããããããã¹ãŠã®ãŠã£ãžã§ãããã«ç»é²ããå¿ èŠããããŸã
åãå«ããããšãã§ããåãŠã£ãžã§ããã ããã¯ãããç»é²ããå€ãã®ããšãããŸã
䜿çšãããªãå ŽåããããŸãã èŠãïŒvar components = {
appComponents: { template: "...", components: components }, appComponents2: { template: "...", components: components },
}
_ãããè¡ããšãã«ããã©ãŒãã³ã¹ã®ããã«ããã¯ã¯ãããŸããïŒ_
â
ãã®ã¹ã¬ããã«ãµãã¹ã¯ã©ã€ãããŠããããããããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/vuejs/vue/issues/1297#issuecomment -241339596ããŸãã¯ãã¥ãŒã
ã¹ã¬ãã
https://github.com/notifications/unsubscribe-auth/AFTLl6QDePtH93VOU2lgrC72Z0vKLsv-ks5qiVcXgaJpZM4F7M1v
ã
@fnlctrlã°ããŒãã«ç»é²ã§ã¯ãããŸããã
åé¡ã¯ããã§ã
ç§ã®æèŠã§ã¯ãåé¡ã¯vueãéçïŒã°ããŒãã«ïŒãªæ¹æ³ã§ãããšããããšã§ãããããã±ãŒãžå/é åžå¯èœãªïŒããŒã«ã«ïŒæ¹æ³ã§ã¯å¶éãããŠããŸãã
Vueã«ã¯ãããã¿ã€ãã®ç¶æ¿ãããããã semi-global
ã®ç»é²ã¯å®éã«ã¯ãã§ã«å¯èœã§ãã
https://jsfiddle.net/fnlCtrl/32dt9e9g/
@fnlctrl
éä¿¡ãããã£ãã«ã§äœã衚瀺ããããããããŸããïŒäŸã«ãšã©ãŒãããããšã«æ³šæããŠãã ããïŒ Unknown custom element: <bar> - did you register the component correctly?
ïŒã
ç§ã¯ååã«æ確ã§ã¯ãããŸãããå€åããªãã¯ç§ã説æãããããšãç解ããŠããŸããã§ããã ããäžåºŠãããŸãããïŒ
ç§ã説æãããã®ã¯ã次ã®ããšãã§ãããšããããšã§ãã
Vue.component('name', {...})
ã°ããŒãã«ã«ç»é²ããŸãïŒããã¯ã·ã³ã°ã«ããŒãžã¢ããªã«æé©ã§ãïŒnew Vue({ components: {...} });
ããŒã«ã«ã«ç»é²ããŸãïŒããŒã«ã«ã§åå©çšã§ããããã«äŸåé¢ä¿ã®ããã³ã³ããŒãã³ããåºè·ããã®ã«é©ããŠããŸãïŒãã ãã芪ããåãŸã§ã³ã³ããŒãã³ããå©çšã§ããããã«ããããšã¯ã§ããŸããã çŸåšã®vm
ã€ã³ã¹ã¿ã³ã¹ãšãã®ã€ã³ã¹ã¿ã³ã¹ã«ããŒãããããã¹ãŠã®ã³ã³ããŒãã³ãã®ã³ã³ããŒãã³ããã°ããŒãã«ã«ç»é²ãããããªãã®ã§ãããä»ã®vmã€ã³ã¹ã¿ã³ã¹ã«ããŒããããã³ã³ããŒãã³ãã«ã¯ç»é²ããŸããã äŸãåç
§ããŠãã ããïŒ https ïŒ
ããããŸããïŒ
ãã£ãšãç§ã®ãã£ãã«ãæ£ããä¿åãããªãã£ãããã§ãã
ããã¯ç§ãããªãã«èŠããããšãããã®ã§ãã
https://jsfiddle.net/fnlCtrl/32dt9e9g/1/
ç§ã¯ä»ããªãã®äŸãèªãã§ããŸãã
ããã§ãåäœããããã«ä¿®æ£ãããäŸããã©ãŒã¯ããŸãããæ£ããç解ããããšãé¡ã£ãŠããŸãã
Fooå
ã«å¶éãããåçã³ã³ããŒãã³ããè¿œå ãããã
@fnlctrlããªãã®äŸã«æè¬ããŸãããããã¯ç§ããŸã éæããããšããŠããããšãã«ããŒããŠããªãããã§ãã
ãã®äŸã§ã¡ãœããã䜿çšãããšãã³ã³ããŒãã³ãã¯Foo
ã«ã®ã¿ç»é²ãããŸããã Foo
ã®åïŒãã®äŸã§ã¯Bar
ïŒã§ã³ã³ããŒãã³ãã䜿çšã§ããããã«ã¯ãªããŸããã
ãã£ãã«ãåç
§ããŠãã ããã Baz
ãFoo
ã«ç»é²ãã Foo
ããèªã¿èŸŒãŸããããã Bar
ã§å©çšã§ããããã«ããããšæããŸãïŒ httpsïŒ// jsfiddle .net / 8y0Lmb01 / 3 /
ããªãã®äŸããã©ãŒã¯ããŸããïŒ https ïŒ//jsfiddle.net/fnlCtrl/uvzaotaz/
éèŠãªã®ã¯ãã³ã³ããŒãã³ãã«ã¯æ確ãªäŸåé¢ä¿ããªãŒãå¿ èŠã§ãããçžäºã«äŸåããåçã³ã³ããŒãã³ããäŸå€ã§ã¯ãªããšããããšã§ãã
@fnlctrlããªãã®äŸã§ã¯ã Baz
ã¯Foo
ã§ã¯äœ¿çšã§ããªããªããŸããã
ããããããã«Vue.component('baz', {...}
ã䜿çšã§ããŸãããåé¡ã¯ããã®baz
ã³ã³ããŒãã³ãã§ä»ã®vueã€ã³ã¹ã¿ã³ã¹ããæ±æãããããšã§ãã
ãŸã
Foo
ãšBar
ã®äž¡æ¹ãããã³ãã¹ãŠã®fooã®åããã¹ãŠã®barã®åããã¹ãŠã®Foo Grand Childrenãªã©ã«Baz
ãç»é²ã§ããŸã...ããããããã«ããã倧èŠæš¡/åçãªã¢ããªã®å Žåã¯éåžžã«è€éã§ã
æå³ãããããŸããïŒ ããŒã«ã«ã§ç»é²ããããšã¯ã§ããŸãããçŸåšã®ã³ã³ããŒãã³ãã®åãå«ã...ã®ã³ã³ããŒãã³ããç¶æ¿ããããšã¯ã§ããŸãã_only_
ã¯ããç§ã¯ä»ããªãã®äž»åŒµãç解ããŠããŸãã ç»é²ããŠããããšã«æ°ã¥ããªãã£ãã®ã§ããããªãã
Fooã®äžã®ã³ã³ããŒãã³ãã¯ãFooã®ã¹ã³ãŒãå
ã§ã°ããŒãã«ã«ãªããŸããã
Vue.componentã ãœãŒã¹ã調ã¹ãŠçç±ã確èªããŸãã
2016幎8æ22æ¥æææ¥ã20ïŒ17 [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
@fnlctrl https://github.com/fnlctrlããªãã®äŸã§ã¯ãBazã¯å©çšã§ããŸãã
ããããŒã§ããããè¡ãã«ã¯ãVue.componentïŒ 'baz'ã{...}ã䜿çšã§ããŸãããåé¡ã¯
ãã®bazã³ã³ããŒãã³ãã§ä»ã®vueã€ã³ã¹ã¿ã³ã¹ããæ±æãããŸãããŸã
ç§ã¯BazãFooãšBarã®äž¡æ¹ãããã³ãã¹ãŠã®fooã®åã«ç»é²ã§ããŸããã
ãã¹ãŠã®ããŒã®åäŸããã¹ãŠã®Foo Grand Childrenãªã©...ããããããã¯å€ãã®ããšãè¿œå ããŸã
倧èŠæš¡/åçã¢ããªã®å Žåã®è€éãæå³ãããããŸããïŒ ããŒã«ã«ã§ç»é²ã§ããŸãããç¶æ¿ã§ããŸãã
çŸåšã®ã³ã³ããŒãã³ãã®åäŸãå«ã...ã®ããã®ã³ã³ããŒãã³ã
_ããã ã_â
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/vuejs/vue/issues/1297#issuecomment -241395119ããŸãã¯ãã¥ãŒã
ã¹ã¬ãã
https://github.com/notifications/unsubscribe-auth/AFTLl2ud0GDO_hOwFN8GIA1TzVEF1q0Fks5qiZM9gaJpZM4F7M1v
ã
ããããšã ïŒïŒ
éèŠãªã®ã¯ãvueã«äŸåããã¹ã¿ã³ãã¢ãã³ã©ã€ãã©ãªãåºè·ããããšããããšã§ãããšã«ãããã¹ã¿ã³ãã¢ãã³ã©ã€ãã©ãªãšããŠãã°ããŒãã«Vueã€ã³ã¹ã¿ã³ã¹ã«ã³ã³ããŒãã³ããç»é²ããããšã¯èš±å¯ãããŠããªããããç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ã®ã³ã³ããŒãã³ããç»é²ããããšã¯å€§ããªã¡ãªããã«ãªããŸãïŒããã¯ã¹ã¿ã³ãã¢ãã³éšåãå£ãã§ãããïŒã
ç§ã話ããŠããããšãVueã«å®è£ ãããŠããå¯èœæ§ããããã©ããæããŠãã ãã
çç±ã¯ç§ãèŠèœãšããŠããã»ã©æçœã ã£ããšæããŸãïŒç§ã¯ããã§ã¯ãããŸããã§ãã
new Foo()
ã䜿çšããŠ..ã
ç§ã®å®¶ã«åž°ããšãã20åã§ãã£ãã«ãååŸããŸãã
2016幎8æ22æ¥æææ¥ã20ïŒ27å®éè¿[email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
ã¯ããç§ã¯ä»ããªãã®äž»åŒµãç解ããŠããŸãã ç»é²ããŠããããšã«æ°ã¥ããªãã£ãã®ã§ããããªãã
Fooã®äžã®ã³ã³ããŒãã³ãã¯ãFooã®ã¹ã³ãŒãå ã§ã°ããŒãã«ã«ãªããŸããã
Vue.componentã ãœãŒã¹ã調ã¹ãŠçç±ã確èªããŸãã2016幎8æ22æ¥æææ¥ã20ïŒ17 Soufiane [email protected]
æžããŸããïŒ@fnlctrl https://github.com/fnlctrlããªãã®äŸã§ã¯ãBazã¯ããã§ã¯ãããŸãã
Fooã§å©çšå¯èœã«ãªããŸããããããè¡ãã«ã¯ãVue.componentïŒ 'baz'ã{...}ã䜿çšã§ããŸãããåé¡ã¯
ãã®bazã³ã³ããŒãã³ãã§ä»ã®vueã€ã³ã¹ã¿ã³ã¹ããæ±æãããŸãããŸã
ç§ã¯BazãFooãšBarã®äž¡æ¹ãããã³ãã¹ãŠã®fooã®åã«ç»é²ã§ããŸããã
ãã¹ãŠã®ããŒã®åäŸããã¹ãŠã®Foo Grand Childrenãªã©...ããããããã¯å€ãã®ããšãè¿œå ããŸã
倧èŠæš¡/åçã¢ããªã®å Žåã®è€éãæå³ãããããŸããïŒ ããŒã«ã«ã§ç»é²ã§ããŸãããç¶æ¿ã§ããŸãã
çŸåšã®ã³ã³ããŒãã³ãã®åäŸãå«ã...ã®ããã®ã³ã³ããŒãã³ã
_ããã ã_â
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/vuejs/vue/issues/1297#issuecomment -241395119ããŸãã¯ãã¥ãŒã
ã¹ã¬ãã
https://github.com/notifications/unsubscribe-auth/AFTLl2ud0GDO_hOwFN8GIA1TzVEF1q0Fks5qiZM9gaJpZM4F7M1v
ã
ãããšã new Foo(...)
ãããŸããããŸããã§ããïŒ https ïŒ//jsfiddle.net/8y0Lmb01/5/
確ãã«å¥åŠãª... httpsïŒ//jsfiddle.net/fnlCtrl/p0ggkncu/
ä»ããã調ã¹ãŠããŸãã
ãœãŒã¹ã³ãŒããããã€ãèªãã ãšãããVueèªäœã§æ¬¡ã®ããã«ãããã³ã°ã§ããããšãããããŸããã
https://jsfiddle.net/fnlCtrl/522aw9sm/
ïŒVue.extendãŸãã¯Vue.componentã䜿çšããã«ããšããã§Vue.componentã¯ãVue.extendãå®è¡ããVue.options.componentsãå€æŽãããã«ããŒé¢æ°ã«ãããŸããïŒ
åãã¢ãããŒãã¯æ¡åŒµVueã§ã¯æ©èœããŸãããïŒ
https://jsfiddle.net/fnlCtrl/v1m2s16u/
ãããã£ãŠãåé¡ã¯ã³ã³ããŒãã³ãã®è§£æ±ºãåå ã§ãããšæããŸãã æ¢ãç¶ããŸãã
@fnlctrlããããŸãããããããšã
resolveAsset
ã«ã€ããŠã®ãããã®ã³ã¡ã³ãã ãšæããŸã
ã¢ã»ããã解決ããŸãã
ãã®é¢æ°ã¯ãåã€ã³ã¹ã¿ã³ã¹ãã¢ã¯ã»ã¹ããå¿ èŠãããããã«äœ¿çšãããŸã
ãã®ç¥å ãã§ãŒã³ã§å®çŸ©ãããã¢ã»ããã«ã
æ¡åŒµVueãžã®ã³ã³ããŒãã³ãã®ç»é²ãæ©èœããããšã«ãªã£ãŠããããšã瀺åããŠããŸãã
é¢æ°æ¬äœã®ã³ãŒãã¯ç¥å ãã§ãŒã³ãèŠãŠããŸããããïŒ å€åããã¯ãŸã å®è£ ãããŠããŸãããïŒ
ç§ã¯ãŸã ååã«ç¥ããŸãããããŸã ãã®æ¯ãèããåŠãã§ããŸããããç¥å
ãã§ãŒã³ãã¯æåã®ãã©ã¡ãŒã¿ãŒoptions
ãæããŠãããšæããŸãã
åå ã¯ããïŒsrc / core / global-api / extendïŒã§ãããšçµè«ä»ããããšãã§ãããšæããŸãã
ããã«ãããæ¡åŒµã¯ã©ã¹ã¯èŠªãšåãã¡ãœããã䜿çšããŸãã
ç§ã¯ããããã¹ãããŸãããããªããã³ã¢/ã°ããŒãã«API /ã¢ã»ããã«ãããã®ãã³ããŒãããªãïŒãã¡ãããã¿ã€ããåãé€ãããdistããŒãžã§ã³å
ã®å¯Ÿå¿ããã³ãŒãã䜿çšããŠãã ããïŒ
vue.extendã«ã次ã®ããã«è¡šç€ºããŸãïŒ Vue
ãSub
ã«å€æŽããŸãïŒïŒ
config._assetTypes.forEach(function (type) {
Sub[type] = function (id, definition) {
if (!definition) {
return this.options[type + 's'][id];
} else {
/* istanbul ignore if */
if ("development" !== 'production') {
if (type === 'component' && config.isReservedTag(id)) {
warn('Do not use built-in or reserved HTML elements as component ' + 'id: ' + id);
}
}
if (type === 'component' && isPlainObject(definition)) {
definition.name = definition.name || id;
definition = Sub.extend(definition);
}
if (type === 'directive' && typeof definition === 'function') {
definition = { bind: definition, update: definition };
}
this.options[type + 's'][id] = definition;
return definition;
}
};
});
Foo = Vue.extend()
ãšFoo.component()
ãæ©èœããŸãã
ããã¯ããã©ãŒãã³ã¹ã®äœäžãåŒãèµ·ãããšæããŸããã
@gsoufãããŠç§ã¯ããºã«ã®æåŸã®ããŒã¹ãèŠã€ãããšæããŸãïŒvueãå€æŽããªãåçã®åé¿çïŒïŒ
https://jsfiddle.net/fnlCtrl/v1m2s16u/
var Root = Vue.extend()
Root.options.components.Foo = Root.extend({
template: '<div>Foo</div>'
})
Root.options.components.Bar = Root.extend({
template: '<div>Bar, uses <foo></foo></div>'
})
new Root({
template: `
<div>
<foo></foo>
<bar></bar>
</div>
`
}).$mount('#app')
ããã«ã¡ã¯@fnlctrl ãåºåã«æè¬ããé ããŠç³ãèš³ãããŸããã
å®éãã³ã³ããŒãã³ãã¯ã芪ããã§ã¯ãªããã³ã³ã¹ãã©ã¯ã¿ããã³ã³ããŒãã³ããç¶æ¿ããŠããããã«èŠããŸãã çŸåšããŠãŒã¹ã±ãŒã¹ã«ããããé©çšã§ãããã©ãããæ€èšããŠããŸãã
ããªãã®å Žåãããã¯ã€ã³ã¹ã¿ã³ã¹ã§ã¯ãªãã³ã³ã¹ãã©ã¯ã¿ãŒã«ã¢ã¿ããããããŸãŸã§ããç§ã¯ãããã€ã³ã¹ã¿ã³ã¹ã®äžéšã§ããã ãã§ããããšãæ¢ããŠããŸã
@fnlctrlã¯ãjavascriptã®åäœæ¹æ³ãšãäŸã®ãããã§ãäœæããã€ã³ã¹ã¿ã³ã¹ããšã«vueããåçã«æ¡åŒµãããŠããã®ã¢ããªã±ãŒã·ã§ã³ã§ã®ã¿ãã¹ãŠãå©çšã§ããããã«ããããšã§åé¿ã§ããŸãã
createVueInstance = function(el, data){
var vExtend = Vue.extend();
vExtend.partial('some-semiglobal-partial', "...");
vExtend.component('some-semiglobal-component', vExtend.extend({...}));
return new vExtend({
el: el,
data: data
});
};
ã³ã¢ãã©ã®ããã«æ§ç¯ããããã確èªããåŸãã€ã³ã¹ã¿ã³ã¹ããšã«å©çšå¯èœãªã³ã³ããŒãã³ããç°¡åã«çµ±åã§ããããã«æ§ç¯ãããããã«ã¯èŠããŸããããã®åé¿çã¯ç§ã«ãšã£ãŠååã«å®å®ããŠããŸãã
ãååããã ãããããšãããããŸãïŒ
ãšããã§ãããªããç§ã«èŠããäŸã¯ãããã¥ã¡ã³ãã§æ·±ã説æã§ãããšæããŸãã ç§ã¯ããã«ã€ããŠã®èšåãèŠã€ããããŸããã§ãã
@gsoufã©ãããããŸããŠã åæ§ã®æ©èœãå®è£ ããã人ã«ãšã£ãŠã¯ããã®åé¡ã§ååã ãšæããŸãïŒsmileïŒ
ããã«ãã»ãã°ããŒãã«ãã®ãŠãŒã¹ã±ãŒã¹ããããŸãã
ç§ã¯æ¯èŒçæ®éçãªã¬ã€ã¢ãŠãã³ã³ããŒãã³ããæã£ãŠããŸãããã³ã³ãã³ãã¯ã¬ã€ã¢ãŠãã³ã³ããŒãã³ãã䜿çšããã³ã³ããŒãã³ãã«ãã£ãŠæ§æã§ããŸãã ã³ã³ããŒãã³ãAã¯ã¬ã€ã¢ãŠãã䜿çšãããã®ã³ã³ãã³ããã³ã³ããŒãã³ãBã§æ§æãããå Žåãä»ã®äžéšã®ã³ã³ããŒãã³ãã¯ã¬ã€ã¢ãŠãã䜿çšãããã®ã³ã³ãã³ããã³ã³ããŒãã³ãCã§æ§æããå ŽåããããŸãã
ãã®ãã¿ãŒã³ããµããŒãããå¿ èŠããããŸããïŒ
ãŸãã¯ããã®ãã¶ã€ã³ã眮ãæãããœãªã¥ãŒã·ã§ã³ã¯ãããŸããïŒ
ãã®ãã¿ãŒã³ã¯ãã³ãŒãã®åå©çšãæ¹åããããã«iOSã§åºã䜿çšãããŠãããããã¯æè»ãªèšèšã§ãã
@hpsoarããããå¿ èŠãªã®ã¯ã¹ãããã§ã
ç§ã®ãã¶ã€ã³ã¯æ¬¡ã®ãšããã§ããåºæ¬çã«ãããã«ãããã»ã«ã§2ã€ã®ããšãã§ããããã«ãªããŸãã
<template>
<div class="tile is-ancestor">
<div class="tile is-parent">
<article class="tile is-child box">
<div class="table-responsive">
<table class="table is-bordered is-striped is-narrow">
<thead>
<tr>
<th v-for="c in columns">
{{c.title}}
</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in items">
<template v-for="c in columns">
<td v-if="c.hasOwnProperty('component')"><div :is="c.component"></div></td>
<td v-else>{{ item[c.name] }}</td>
</template>
</tr>
</tbody>
</table>
</div>
</article>
</div>
</div>
</template>
<script>
export default {
components: {
},
props: [
'columns',
'items'
],
data: function () {
return {
}
}
}
</script>
<style lang="scss" rel="stylesheet/scss">
.table-responsive {
display: block;
width: 100%;
min-height: .01%;
overflow-x: auto;
}
</style>
æãåèã«ãªãã³ã¡ã³ã
ããããæ瀺çã«ã€ã³ããŒãããããšã¯ãããããã®ããç¹°ãè¿ãã§ãã ããã«ããããã®éå±€å ã®ä»»æã®ã³ã³ããŒãã³ãã ãã調ã¹ãŠããã®äŸåé¢ä¿ãã©ãããæ¥ãŠããã®ããç解ã§ããŸãã æé»çãªãã©ãŒã«ããã¯ã䜿çšãããšã3ãæåŸã«éå±€å ã®ã©ãã«ãããã®ã³ã³ããŒãã³ããã€ã³ããŒãããããæãåºããªããªããŸãã