Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Vue.jsから始めるDOMにデータを持たせないアプリケーション開発への第1歩

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

 Vue.jsから始めるDOMにデータを持たせないアプリケーション開発への第1歩

第51回 長岡IT技術者勉強会

Avatar for Kazumune Katagiri

Kazumune Katagiri

March 25, 2017
Tweet

More Decks by Kazumune Katagiri

Other Decks in Technology

Transcript

  1. ࣗݾ঺հ • ยۅ Ұफ(͔ͨ͗Γ ͔ͣΉͶ) • id:nemuzuka / @nemuzuka •

    Java / JavaScript / Scala • ݸਓࣄۀओ(vss.jp.net)
  2. ͨͩɺγεςϜͷن໛͕େ͖͘ ͳͬͯ͘Δͱ • DOMͷidཁૉ͕ඃΒͳ͍Α͏ʹɺͩΜͩΜ௕͘ͳͬͯ͘Δ • ͜ͷclass໊ͬͯม͑ͯྑ͍Μ͚ͩͬʁͦ΋ͦ΋style༻ʁjQuery༻ʁ • طଘΛյ͞ͳ͍Α͏ʹ৽͍͠class࡞੒… • selector͕Ϝμʹ೉͘͠

    • DOMʹΞΫηεͯ͠σʔλ(data-* / value)ΛҾͬுͬͯ͘Δͷ໘౗ • άϩʔόϧม਺ʹΞΫηε͍ͯ͠Δͱಉٛ • Ͳ͔͜Β΋ΞΫηεͰ͖ΔͷͰɺଞͷॲཧʹલఏ৚݅ͷσʔλΛফ͞ΕΔ / ্ॻ͖͞ΕΔ͜ͱ΋͋Δ • ॲཧΛ௥͏ͷʹDOMͷมԽΛ௥͏ඞཁ͕͋Δ DOMʹσʔλΛ࣋ͨͤΔ͜ͱʹݶքΛײ࢝͡ΊΔ (2016 ळ)
  3. ͜ͷ࣌఺Ͱɺ͔ͳΓศར • ؀ڥ͸scriptλάͰಡΈࠐΊ͹͍͍ • npmͱ͔babelͱ͔ෆཁʂ͙࢝͢ΊΒΕΔʂ • templateػೳ • ʮ{{ʯ /

    ʮ}}ʯ Ͱ஋Λදࣔ͢Δ • jsଆͰDOMཁૉҙࣝ͢Δඞཁͳ͠ • Arrayͷมߋʹ௥ैͯ͠DOM΋มߋͯ͘͠ΕΔ • ૒ํ޲σʔλόΠϯσΟϯά • htmlଆͷมߋˠjsଆʹ൓өɺjsଆͷมߋˠhtmlଆʹ൓өͯ͘͠ΕΔ • αʔό΁ͷϦΫΤετύϥϝʔλ͸js্ͷVueΠϯελϯεͷdataϓϩύςΟ͚ͩҙ͓͚ࣝͯ͠͹ྑ͍ • data-*ͱ͔hiddenͱ͔ෆཁ • Ϣʔβ͕ೖྗͨ͠஋Λidͱ͔selectorΛ࢖༻ͯ͠ɺjsͰरͬͯύϥϝʔλ࡞੒͢Δ͜ͱ΋ෆཁ • σʔλͱDOMͷಉظ͔Βղ์͞Εɺjs͸σʔλͱϩδοΫ͚ͩʹूதͰ͖Δ
  4. 5. ಈత߲໨ / ද੍ࣔޚ • ಈతʹclassΛ੾Γସ͍͑ͨ(ex. ৚݅Λຬͨͨ࣌͠) • v-bind:class •

    ಈతʹidཁૉΛઃఆ͍ͨ͠ • v-bind:id • ৚݅ʹΑ߲ͬͯ໨Λඇදࣔʹ͍ͨ͠ • v-if লུه๏Ͱʮ:classʯʮ:idʯͱ΋ॻ͚Δ →ʮ:ʯͰ࢝·͍ͬͯΕ͹ಈతͳ߲໨ →seen͕trueͳΒཁૉදࣔ
  5. ίϯϙʔωϯτͷϧʔϧ • ࣗ෼ͷ਌(্Ґ) / ࢠ(ԼҐ)ίϯϙʔωϯτͷΈҙࣝ͢Δ(1֊૚͚ͩ) • ࢠίϯϙʔωϯτʹσʔλΛ౉͍ͨ͠ʂ(ҰཡͷσʔλΛ౉͍ͨ͠) • ਌ɿࢠίϯϙʔωϯτ্Ͱv-bindͰ౉͢(:todos=“filteredTodos") •

    ࢠɿ਌͔ΒpropsͰड͚औΔ͜ͱΛఆٛ͢Δ(props: [“todos"]) • ਌ίϯϙʔωϯτʹΠϕϯτ௨஌͍ͨ͠(ߦΛclick͞Εͨ࣌ʹμΠΞϩάΛOpen͢ΔΠϕϯτΛ਌ʹ౤͍͛ͨ) • ࢠɿ਌ʹ޲͚ͯ$emitͰΠϕϯτΛૹ৴͢Δ(this.$emit(‘OpenModalDialog', …ύϥϝʔλ)) • ਌ɿࢠίϯϙʔωϯτ্ͰΠϕϯτ͕ૹ৴͞Εͨ࣌ͷॲཧΛఆٛ͢Δ(@OpenModalDialog=“openModalDialog") • ࢠίϯϙʔωϯτͷॲཧΛݺͼ͍ͨ(μΠΞϩάΛOpen͍ͨ͠) • ਌ɿࢠίϯϙʔωϯτʹrefࣝผࢠΛఆٛ͢Δ(ref="modalDialog") • ݺͼग़࣌͢ɺ$refs.”ࣝผࢠ”.ϝιου(this.$refs.modalDialog.openDialog)
  6. ίϯϙʔωϯτͷԿ͕ྑ͍ͷʁ • ίϯϙʔωϯτ಺ͷin/out͕ཧղ͠΍͘͢ͳΔ • ࢖༻͢Δࢠίϯϙʔωϯτ • components • ਌ίϯϙʔωϯτ͔ΒདྷΔσʔλ •

    props • ಺෦σʔλ / ॲཧ • data / methods / computed • ਌ʹ௨஌͢ΔΠϕϯτ • $emitͷՕॴ • ࣗίϯϙʔωϯτͷΠϕϯτ(@click) / ࢠίϯϙʔωϯτ͔Β௨஌͞ΕΔΠϕϯτ • template্ʹهࡌ ίϯϙʔωϯτͷ࢓૊Έʹ৐͔ͬΔ͜ͱͰ ಺෦ॲཧͷݟ௨͕͠jQuery + Hogan.jsͷ࣌ʹൺ΂ͯ ֨ஈʹྑ͘ͳΔʂʂ
  7. <template>
 <tr @click.stop="openModalDialog">
 <td>{{index + 1}}</td>
 <td class="text-left">{{todo.context}}</td>
 <td>{{todo.lastUpdateDate}}</td>
 <td>


    <button type="button" class="btn btn-danger b <i class="glyphicon glyphicon-remove"></i>
 </button>
 </td>
 </tr>
 </template>
 
 <script>
 export default {
 name: 'todo-item',
 props: ["todo", "index"],
 methods: {
 openModalDialog(e) {
 const self = this;
 self.$emit('OpenModalDialog', e, self.todo);
 },
 deleteItem(e) {
 const self = this;
 self.$emit('DeleteItem', e, self.todo);
 }
 }
 }
 </script>
 
 <style scoped>
 tr {
 cursor: pointer;
 }
 </style>
 vue-cliΛ࢖͏ͱͲ͏ͳΔͷʁ • ίϯϙʔωϯτຖʹvueϑΝΠϧΛ1ͭ࡞੒(࠷ऴతʹjsʹͳΔ) • template(HTML) • Pug౳΋࢖͑Δ໛༷ • script(js) • templateʹ౉͢data΍ɺmethods౳Λఆٛ • style • cssɻ͜ͷίϯϙʔωϯτʹ͚ͩ౰ͯΔɺͱ͍͏ఆٛ΋Մೳ ίϯϙʔωϯτΛ1ͭͷvueϑΝΠϧͰ׬݁͢ΔΑ͏ʹॻ͚ͯɺ੹຿όονϦʂ(୯ҰϑΝΠϧίϯϙʔωϯτ) html/js/css ෳ਺ϑΝΠϧΛߦͬͨΓདྷͨΓ͠ͳͯ͘΋ྑ͍ʂൃࢄ͕ͪ͠ͳը໘։ൃʹடংΛʂʂʂ
  8. ·ͱΊ • Vue.jsΛ࢖͏ͱDOMʹσʔλΛ࣋ͨͤΔඞཁ͕ݮΓ·͢ • Ծ૝DOM / ૒ํ޲σʔλόΠϯσΟϯάͷ͋Γ͕ͨ͞ • ΋͏ࣗલͰΠϕϯτरͬͯDOMॻ͖׵͑ͳΜͯͨ͘͠ͳ͍ʂʂ •

    DOMૢ࡞༻ͷid΍classࢦఆ͕େ෯ʹݮͬͨɻΧελϜσʔλଐੑ΋࢖Θͳ͘ͳͬͨ • ίϯϙʔωϯτԽͰॲཧͷ੹຿΍σʔλͷείʔϓ͕ߜΕΔΑ͏ʹͳͬͨ • vue-cliͷߟ͑ํʹܹ͘͠ڞײ • 1ίϯϙʔωϯτ = 1vueϑΝΠϧͷؔ܎͕γϯϓϧͰΠΠ • ʮ͜ͷϑΝΠϧݟ͓͚ͯ͹େମ௥͑Δײ͡ʯ͕࠷ߴʹ͋Γ͕͍ͨɻϑΝΠϧҠಈ͢Δͱ಄ͷ੾Γସ͕͑… • jsͰhtml(template)͸ॻ͖ͨ͘ͳ͍ΜͰ͢Α… • ͍ͭͰʹϒϥ΢βjsΛES6Ͱॻ͚ΔΑ͏ʹͳΓ·͢ • πϥΠͷ͸؀ڥ࡞Δ(ཧղ͢Δ)·Ͱ • ʮ1ճ࡞ͬͯऴΘΓʯ͡Όͳ͍ΞϓϦͳΒɺVue.js΋ྑ͍ͱࢥ͍·͢ʂ
  9. ͪͳΈʹɺ2016 ळ࣌఺ͷࢲͷεϖοΫ • jQuery͸஌ͬͯΔɺ࢖ͬͯΔ • Javascriptৄ͘͠͸஌Βͳ͍ • ES5/ES6ͷษڧ͸αϘͬͯͨ • node.jsͷଘࡏ͸஌͍ͬͯΔ͕Πϯετʔϧͨ͜͠ͱͳ͍

    • jsϑΝΠϧ͸scriptλάͰ֎෦͔Β࣋ͬͯ͘Δํ͔ࣜ͠΍ͬͨ͜ͱͳ͍ • Reactͱ͔Angularͱ͔ͷଘࡏ͸஌͍ͬͯΔ͕νϡʔτϦΞϧ΋΍ͬͯͳ͍
  10. ͦΕ͕3ϲ݄͘Β͍Ͱ… 1. npm / webpack 2. vue-cli 3. ES6Ͱॻ͍ͯBabelͰϏϧυ ͢Δ·ͰʹͳΓ·ͨ͠ʂʋ(˜ʆ)ϊ

    ※جຊతʹ͸νϡʔτϦΞϧͰԿͱ͔ͳͬͨͷͰ Vue.jsࣗମͷֶशίετ͸௿͍ͱࢥ͍·͢ [͓ੈ࿩ʹͳΓ·ͨ͠] OQNͱXFCQBDLͰϏϧυK2VFSZ͔Βͷ࣍ͷεςοϓ
  11. VSS Kanban • αʔόαΠυ : Scala(Skinny Framework) • ΫϥΠΞϯταΠυ :

    Vue.js Scala΍Vue.jsΛֶͿͨΊͷͱ͔͔ͬΓʹͯ͠΋Β͑Δͱخ͍͠σε https://github.com/nemuzuka/vss-kanban