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

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

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

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

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