ã¬ã¤ã
åºæ¬çãªä½¿ãæ¹
- ã¤ã³ã¹ãã¼ã«
- ã¯ããã«
- Vue ã¤ã³ã¹ã¿ã³ã¹
- ãã³ãã¬ã¼ãæ§æ
- ç®åºããããã£ã¨ã¦ã©ããã£
- ã¯ã©ã¹ã¨ã¹ã¿ã¤ã«ã®ãã¤ã³ãã£ã³ã°
- æ¡ä»¶ä»ãã¬ã³ããªã³ã°
- ãªã¹ãã¬ã³ããªã³ã°
- ã¤ãã³ããã³ããªã³ã°
- ãã©ã¼ã å ¥åãã¤ã³ãã£ã³ã°
- ã³ã³ãã¼ãã³ãã®åºæ¬
ã³ã³ãã¼ãã³ãã®è©³ç´°
- ã³ã³ãã¼ãã³ãã®ç»é²
- ããããã£
- ã«ã¹ã¿ã ã¤ãã³ã
- ã¹ããã
- åç & éåæã³ã³ãã¼ãã³ã
- ç¹å¥ãªåé¡ã«å¯¾å¦ãã
ãã©ã³ã¸ã·ã§ã³ã¨ã¢ãã¡ã¼ã·ã§ã³
- Enter/Leave ã¨ãã©ã³ã¸ã·ã§ã³ä¸è¦§
- ç¶æ ã®ãã©ã³ã¸ã·ã§ã³
åå©ç¨ã¨æ§æ
- ããã¯ã¹ã¤ã³
- ã«ã¹ã¿ã ãã£ã¬ã¯ãã£ã
- æç»é¢æ°ã¨JSX
- ãã©ã°ã¤ã³
- ãã£ã«ã¿ã¼
ãã¼ã«
- åä¸ãã¡ã¤ã«ã³ã³ãã¼ãã³ã
- ãã¹ã
- TypeScript ã®ãµãã¼ã
- ãããã¯ã·ã§ã³ç°å¢ã¸ã®é ä¿¡
ã¹ã±ã¼ã«ã¢ãã
- ã«ã¼ãã£ã³ã°
- ç¶æ 管ç
- ãµã¼ããµã¤ãã¬ã³ããªã³ã°
- ã»ãã¥ãªãã£
å é¨
- ãªã¢ã¯ãã£ãã®æ¢æ±
ç§»è¡
- Vue 1.x ããã®ç§»è¡
- Vue Router 0.7.x ããã®ç§»è¡
- Vuex 0.6.x ãã 1.0 ã¸ã®ç§»è¡
ãã®ä»
- ä»ã®ãã¬ã¼ã ã¯ã¼ã¯ã¨ã®æ¯è¼
- Vue.js ã³ãã¥ããã£ã¸åå ãã¾ããã!
- ãã¼ã ã«ä¼ãã
v2.x 以åã®ããã¥ã¡ã³ãã§ãã v3.x ã®ããã¥ã¡ã³ããè¦ããå ´åã¯ãã¡ã
ã¤ãã³ããã³ããªã³ã°
æçµæ´æ°æ¥: 2020å¹´1æ7æ¥
ã¤ãã³ãã®è³¼èª
v-on ãã£ã¬ã¯ãã£ãã使ããã¨ã§ãDOM ã¤ãã³ãã®è³¼èªãã¤ãã³ãçºç«æã® JavaScript ã®å®è¡ãå¯è½ã«ãªãã¾ãã
ä¾:
<div id="example-1">
<button v-on:click="counter += 1">Add 1</button>
<p>The button above has been clicked {{ counter }} times.</p>
</div>
var example1 = new Vue({
el: '#example-1',
data: {
counter: 0
}
})
çµæ:
The button above has been clicked {{ counter }} times.
ã¡ã½ããã¤ãã³ããã³ãã©
å¤ãã®ã¤ãã³ããã³ãã©ã®ãã¸ãã¯ã¯ããè¤éã«ãªã£ã¦ããã®ã§ãv-on 屿§ã®å¤ã« JavaScript å¼ãè¨è¿°ãç¶ããã®ã¯ç¾å®çã§ã¯ããã¾ããããã®ãããv-on ã¯å¼ã³åºãããã¡ã½ããã®ååãåãä»ãã¾ãã
ä¾:
<div id="example-2">
<!-- `greet` ã¯ããããããå®ç¾©ããã¡ã½ããã®åå -->
<button v-on:click="greet">Greet</button>
</div>
var example2 = new Vue({
el: '#example-2',
data: {
name: 'Vue.js'
},
// `methods` ãªãã¸ã§ã¯ãã®ä¸ã«ã¡ã½ãããå®ç¾©ãã
methods: {
greet: function (event) {
// ã¡ã½ããå
ã® `this` ã¯ã Vue ã¤ã³ã¹ã¿ã³ã¹ãåç
§ãã¾ã
alert('Hello ' + this.name + '!')
// `event` ã¯ããã¤ãã£ã DOM ã¤ãã³ãã§ã
if (event) {
alert(event.target.tagName)
}
}
}
})
// JavaScript ããã¡ã½ãããå¼ã³åºããã¨ãã§ãã¾ã
example2.greet() // => 'Hello Vue.js!'
çµæ:
ã¤ã³ã©ã¤ã³ã¡ã½ãããã³ãã©
ã¡ã½ããåãç´æ¥æå®ãã代ããã«ãã¤ã³ã©ã¤ã³ JavaScript å¼ã§ã¡ã½ãããæå®ãããã¨ãã§ãã¾ã:
<div id="example-3">
<button v-on:click="say('hi')">Say hi</button>
<button v-on:click="say('what')">Say what</button>
</div>
new Vue({
el: '#example-3',
methods: {
say: function (message) {
alert(message)
}
}
})
çµæ:
æã«ã¯ãã¤ã³ã©ã¤ã³ã¹ãã¼ãã¡ã³ããã³ãã©ã§ãªãªã¸ãã«ã® DOM ã¤ãã³ããåç
§ããããã¨ãããã§ããããç¹å¥ãª $event 夿°ã使ããã¨ã§ã¡ã½ããã« DOM ã¤ãã³ããæ¸¡ããã¨ãã§ãã¾ã:
<button v-on:click="warn('Form cannot be submitted yet.', $event)">
Submit
</button>
// ...
methods: {
warn: function (message, event) {
// ãã¤ãã£ãã¤ãã³ããåç
§ãã¦ãã¾ã
if (event) {
event.preventDefault()
}
alert(message)
}
}
ã¤ãã³ã修飾å
ã¤ãã³ããã³ãã©å
ã§ã® event.preventDefault() ã¾ã㯠event.stopPropagation() ã®å¼ã³åºãã¯ãæ§ã
ãªå ´é¢ã§å
±éã«å¿
è¦ã«ãªãã¾ãããããã¯ã¡ã½ããå
é¨ã§ç°¡åã«å¼ã³åºããã¨ãã§ãã¾ãããDOM ã¤ãã³ãã®è¾¼ã¿å
¥ã£ãå¦çããããªãããããç´ç²ãªãã¼ã¿ãã¸ãã¯ã ãã«ãªã£ã¦ããæ¹ãããè¯ãã§ãããã
ãã®åé¡ã«å¯¾å¿ããããã«ãVue 㯠v-on ã®ããã«ã¤ãã³ã修飾å(event modifiers)ãæä¾ãã¦ãã¾ãã修飾åã¯ãããã(.)ã§è¡¨è¨ããããã£ã¬ã¯ãã£ãã®æ¥å°¾è¾ãæãè¿ãã¦ãã ããã
.stop.prevent.capture.self.once.passive
<!-- ã¯ãªãã¯ã¤ãã³ãã®ä¼æ¬ãæ¢ã¾ãã¾ã -->
<a v-on:click.stop="doThis"></a>
<!-- submit ã¤ãã³ãã«ãã£ã¦ãã¼ã¸ããªãã¼ãããã¾ãã -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修飾åã¯ç¹ãããã¨ãã§ãã¾ã -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- å¤ãæå®ããã修飾åã ãå©ç¨ãããã¨ãã§ãã¾ã -->
<form v-on:submit.prevent></form>
<!-- ã¤ãã³ããªã¹ãã¼ã追å ããã¨ãã«ãã£ããã£ã¢ã¼ãã§ä½¿ãã¾ã -->
<!-- è¨ãæããã°ãå
é¨è¦ç´ ã対象ã¨ããã¤ãã³ãã¯ããã®è¦ç´ ã«ãã£ã¦å¦çãããåã«ããã§å¦çããã¾ã -->
<div v-on:click.capture="doThis">...</div>
<!-- event.target ãè¦ç´ èªèº«ã®ã¨ãã ãããã³ãã©ãå¼ã³åºããã¾ã -->
<!-- è¨ãæããã¨åè¦ç´ ã®ã¨ãã¯å¼ã³åºããã¾ãã -->
<div v-on:click.self="doThat">...</div>
修飾åã使ç¨ããã¨ããé¢é£ããã³ã¼ããåãé åºã§çæãããããæ³¨æãã¦ãã ããããããããv-on:click.prevent.self ã使ç¨ããã¨å
¨ã¦ã®ã¯ãªãã¯ã¤ãã³ããé²ããã¨ã¯ã§ãã¾ãããv-on:click.self.prevent ã¯è¦ç´ èªèº«ã«ãããã¯ãªãã¯ã¤ãã³ããé²ãã ãã§ãã
2.1.4 ããæ°è¦
<!-- æå¤§1åãã¯ãªãã¯ã¤ãã³ãã¯ããªã¬ããã¾ã -->
<a v-on:click.once="doThis"></a>
ä»ã®ä¿®é£¾åã¨ã¯éã£ã¦ããã¤ãã£ã DOM ã¤ãã³ãå°ç¨ã§ã¯ããã¾ããã.once 修飾åãã³ã³ãã¼ãã³ãã¤ãã³ãã§ã使ç¨ãããã¨ãã§ãã¾ããã¾ã ã³ã³ãã¼ãã³ãã«ã¤ãã¦èªãã§ããªããªããä»ã¯æ°ã«ããå¿
è¦ã¯ããã¾ããã
2.3.0 ã§æ°è¦è¿½å
Vue 㯠addEventListener ã® passive ãªãã·ã§ã³ã«å¯¾å¿ãã .passive 修飾åãæä¾ãã¦ãã¾ãã
<!-- `onScroll` ã `event.preventDefault()` ãå«ãã§ããã¨ãã¦ã -->
<!-- ã¹ã¯ãã¼ã«ã¤ãã³ãã®ããã©ã«ãã®æå(ã¤ã¾ãã¹ã¯ãã¼ã«)㯠-->
<!-- ã¤ãã³ãã®å®äºãå¾
ã¤ãã¨ãªããã ã¡ã«çºçããããã«ãªãã¾ã -->
<div v-on:scroll.passive="onScroll">...</div>
.passive 修飾åã¯ç¹ã«ã¢ãã¤ã«ã§ã®ããã©ã¼ãã³ã¹ãæ¹åããã®ã«æç¨ã§ãã
.passive 㨠.prevent ãä¸ç·ã«ä½¿ããªãã§ãã ããã.prevent ã¯ç¡è¦ããããã©ã¦ã¶ã«ã¯ããããè¦åã表示ããã¾ãã.passive ã¯ã¤ãã³ãã®ããã©ã«ãã®æåã妨ããªããã¨ããã©ã¦ã¶ã«ä¼éãããã¨ãæãåºãã¦ãã ããã
ãã¼ä¿®é£¾å
ãã¼ãã¼ãã¤ãã³ããè³¼èªããã«ããã£ã¦ãç¹å®ã®ãã¼ã®ãã§ãã¯ãå¿
è¦ã«ãªããã¨ãããã¾ããVue ã§ã¯ãv-on ã«å¯¾ãã¦ãã¼ä¿®é£¾åã追å ãããã¨ãã§ãã¾ã:
<!-- `key` ã `Enter` ã®ã¨ãã ãã`vm.submit()` ãå¼ã°ãã¾ã -->
<input v-on:keyup.enter="submit">
KeyboardEvent.key ã§å
¬éããã¦ããä»»æã®ãã¼åã¯ãã±ããã±ã¼ã¹ã«å¤æãããã¨ã§ä¿®é£¾åã¨ãã¦ç´æ¥ä½¿ç¨ã§ãã¾ãã
<input v-on:keyup.page-down="onPageDown">
ä¸ã®ä¾ã§ã¯ããã³ãã©ã¯ $event.key ã 'PageDown' ã«çããå ´åã ãå¼ã°ãã¾ãã
ãã¼ã³ã¼ã
keyCode ã¤ãã³ãã®ä½¿ç¨ã¯ 鿍奍 ã§ãæ°ãããã©ã¦ã¶ã§ã¯ãµãã¼ããããªãå¯è½æ§ãããã¾ãã
keyCode 屿§ã使ããã¨ãã§ãã¾ã:
<input v-on:keyup.13="submit">
ã¬ã¬ã·ã¼ãã©ã¦ã¶ã®ãµãã¼ããå¿ è¦ãªã¨ãã®ããã«ãVue ã¯æãä¸è¬çã«ä½¿ç¨ããããã¼ã³ã¼ãã®ã¨ã¤ãªã¢ã¹ãæä¾ãã¦ãã¾ã:
.enter.tab.delete(âDeleteâ 㨠âBackspaceâ ãã¼ä¸¡æ¹ããã£ããã£ãã¾ã).esc.space.up.down.left.right
ããã¤ãã®ãã¼ (.escãããã¦å
¨ã¦ã®ç¢å°ãã¼) 㯠IE9 ã§ä¸è²«æ§ã®ãªã key å¤ãæã£ã¦ãã¾ããIE9 ããµãã¼ãããå¿
è¦ãããå ´åã¯ããããã®çµã¿è¾¼ã¿ã¨ã¤ãªã¢ã¹ã使ãã¹ãã§ãã
ã°ãã¼ãã«ãª config.keyCodes ãªãã¸ã§ã¯ãçµç±ã§ã«ã¹ã¿ã ãã¼ä¿®é£¾åã®ã¨ã¤ãªã¢ã¹ãå®ç¾©ã§ãã¾ã:
// `v-on:keyup.f1` ãå¯è½ã«ãã¾ã
Vue.config.keyCodes.f1 = 112
ã·ã¹ãã 修飾åãã¼
2.1.0 ããæ°è¦
次ã®ä¿®é£¾åã使ç¨ããã¨ã対å¿ãããã¼ãæ¼ãããã¨ãã«ã®ã¿ãã¦ã¹ãããã¯ãã¼ãã¼ãã®ã¤ãã³ããªã¹ããããªã¬ã§ãã¾ã:
.ctrl.alt.shift.meta
注æ: Macintosh ãã¼ãã¼ãã®å ´åãmeta ã¯ã³ãã³ããã¼ï¼âï¼ã§ããWindows ã®ãã¼ãã¼ãã§ã¯ãmeta ã¯ã¦ã£ã³ãã¦ãã¼ï¼âï¼ã§ããSun Microsystems ã®ãã¼ãã¼ãã§ã¯ãã¡ã¿ã¯å®ç·ã®ãã¤ã¤ã¢ã³ãï¼âï¼ã¨ãã¼ã¯ããã¦ãã¾ããç¹å®ã®ãã¼ãã¼ãã§ã¯ãç¹ã« MIT ã Lisp ãã·ã³ã®ãã¼ãã¼ã㨠Knight ãã¼ãã¼ããspace-cadet ãã¼ãã¼ããã¡ã¿ã®ãããªå¾ç¶æ©ã«ã¯ âMETAâ ã¨è¡¨ç¤ºããã¾ãã Symbolics ã®ãã¼ãã¼ãã§ã¯ã âMETAâ ã¾ã㯠âMetaâ ã¨ããã©ãã«ãä»ãã¦ãã¾ãã
ä¾:
<!-- Alt + C -->
<input v-on:keyup.alt.67="clear">
<!-- Ctrl + Click -->
<div v-on:click.ctrl="doSomething">Do something</div>
修飾åãã¼ã¯é常ã®ãã¼ã¨ã¯ç°ãªããkeyup ã¤ãã³ãã§ä½¿ç¨ããå ´åãã¤ãã³ãçºçæã«æ¼ããã¦ããªããã°ãªããªããã¨ã«æ³¨æãã¦ãã ãããè¨ãæããã¨ãkeyup.ctrl 㯠ctrl ãæ¼ããªããä½ãã®ãã¼ãé¢ããã¨ãã«ã®ã¿ãããªã¬ããã¾ããctrl ãã¼ã ããé¢ãã¦ããããªã¬ããã¾ãããããªã¬ããããã¨ãæããªããctrl ã§ã¯ãªã keyup.17 ã®ããã« keyCode ã使ç¨ãã¦ãã ããã
.exact 修飾å
2.5.0 ã§æ°è¦è¿½å
.exact 修飾åã¯ã¤ãã³ããå¼ãèµ·ããããã«å¿
è¦ãªã·ã¹ãã 修飾åã®æ£ç¢ºãªçµã¿åãããå¶å¾¡ãã¾ãã
<!-- ãã㯠Ctrl ã«å ã㦠Alt ã Shift ãã¼ãæ¼ããã¦ãã¦ãçºè¡ããã¾ã -->
<button v-on:click.ctrl="onClick">A</button>
<!-- ãã㯠Ctrl ãã¼ãæ¼ãããä»ã®ãã¼ãæ¼ããã¦ãªãã¨ãã ãçºè¡ããã¾ã -->
<button v-on:click.ctrl.exact="onCtrlClick">A</button>
<!-- ãã㯠ã·ã¹ãã 修飾åãæ¼ããã¦ãªãã¨ãã ãçºè¡ããã¾ã -->
<button v-on:click.exact="onClick">A</button>
ãã¦ã¹ãã¿ã³ã®ä¿®é£¾å
2.2.0 ããã®æ°æ©è½
.left.right.middle
ãããã®ä¿®é£¾åã¯ãã¤ãã³ãã®ããªã¬ã®ãã³ããªã³ã°ããç¹å®ã®ãã¦ã¹ã®ãã¿ã³ã®ã¿ã«å¶éãã¾ãã
ãªã HTML ã«ãªã¹ããè¨è¿°ããã®ã§ãã
ããã¾ã§èª¬æãã¦ãããããªã¤ãã³ãç£è¦ã®ã¢ããã¼ãã¯ãâé¢å¿ã®åé¢âã¨ããå¤ãè¯ãã«ã¼ã«ãç ´ã£ã¦ããã®ã§ã¯ãªãããã¨å¿é
ãããããããã¾ãããå®å¿ãã¦ãã ããããã¹ã¦ã® Vue ãã³ãã©é¢æ°ã¨å¼ã¯ãç¾å¨ã® View ãæ±ã ViewModel ã«å³å¯ã«éãã¦ãã¾ããããã«ãã£ã¦ã¡ã³ããã³ã¹ãé£ãããªããã¨ã¯ããã¾ãããå®éãv-on ãå©ç¨ãããã¨ã§ããã¤ãã®å©ç¹ãããã¾ãã
HTML ãã³ãã¬ã¼ããçºãããã¨ã§ãJS ã³ã¼ãå ã®ãã³ãã©é¢æ°ãæ¢ããã¨ã容æã«ãã¾ã
JS å ã®ã¤ãã³ããªã¹ãã¼ãæä½æ¥ã§ã¢ã¿ããããå¿ è¦ããªãã®ã§ãViewModel ã DOM ä¾åã®ãªãç´ç²ãªãã¸ãã¯ã«ã§ãã¾ããããã¯ãã¹ã¿ããªãã£ãåä¸ããã¾ãã
ViewModel ãæ¶å»ãããã¨ãã«ããã¹ã¦ã®ã¤ãã³ããªã¹ãã¼ã¯èªåã§åé¤ããã¾ããæåã§ãããã®æ¶å»ããããªããã¨ãæ°ã«ããå¿ è¦ã¯ããã¾ããã