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

Vue.jsをa-blog cmsで試してみる

Vue.jsをa-blog cmsで試してみる

2021年6月8日にオンラインで開催された「a-blog cms zoom up 2021/06」の発表スライドです。JavaScriptフレームワーク「Vue.js」をa-blog cmsをプラットフォームとして活用した初歩的な例をまとめています。

うぇびんさん

June 08, 2021
Tweet

More Decks by うぇびんさん

Other Decks in Technology

Transcript

  1. jQueryͱͷҧ͍ : jQueryͷ৔߹ <p> 変数 a は <span id=“var”></span> です。

    </p> let a = 0; $(‘#var’).text(a); a = 3; $(‘#var’).text(a);
  2. jQueryͱͷҧ͍ : jQueryͷ৔߹ ˣˣˣ+BWB4DSJQUͷRVFSZ4FMFDUPS΋ <p> 変数 a は <span id=“var”></span>

    です。 </p> let a = 0; $(‘#var’).text(a); a = 3; $(‘#var’).text(a); ม਺ͷ஋͕มΘͬͨΒ
 DOMʢHTMLͷߏ଄ʣΛ
 εΫϦϓτͰॻ͖׵͑Δඞཁ͕͋Δ
  3. jQueryͱͷҧ͍ : Vueͷ৔߹ <div id=“app"> <p> 変数 a は {{a}}

    です。 </p> </div> let a = 0; let app = new Vue({ el: '#app', data: data, }) a = 3;
  4. jQueryͱͷҧ͍ : Vueͷ৔߹ <div id=“app"> <p> 変数 a は {{a}}

    です。 </p> </div> let a = 0; let app = new Vue({ el: '#app', data: data, }) a = 3; HTML಺ͷɺ೚ҙͷཁૉΛ
 ʮVueΞϓϦέʔγϣϯʯ ͱͯ͠એݴ
  5. jQueryͱͷҧ͍ : Vueͷ৔߹ <div id=“app"> <p> 変数 a は {{a}}

    です。 </p> </div> let a = 0; let app = new Vue({ el: '#app', data: data, }) a = 3; ม਺ͷ஋͕มΘΔͱ
 ΞϓϦέʔγϣϯ಺ͷ
 DOM͕ࣗಈతʹߋ৽͞ΕΔ
  6. a-blog cmsͷϞδϡʔϧͰදࣔ <!-- BEGIN_MODULE Entry_Summary id="summary_actor_all" --> <!-- BEGIN unit:loop

    --> <!-- BEGIN entry:loop --> 【男優の情報を繰り返し表示】 <!-- END entry:loop --> <!-- END unit:loop --> <!-- END_MODULE Entry_Summary -->
  7. Vue.jsͷ v-for Ͱදࣔ - HTMLଆ <div id=“app”> <div v-for="item in

    items" v-bind:key="item.id"> 【男優の情報を繰り返し表示】 </div> </div> ଐੑͬΆ͍΋ͷͷ͜ͱΛਖ਼ࣜʹ͸σΟϨΫςΟϒͱ͍͍·͢
  8. let data = { items: [ <!-- BEGIN_MODULE Entry_Summary id="summary_actor_all"

    —> <!-- BEGIN unit:loop --><!-- BEGIN entry:loop —> { id: {eid}, name: '{title}', image_src: '%{MEDIA_ARCHIVES_DIR}{actor_photo@path}’, furigana: '{actor_furigana}', age: {actor_birth}[age], height: {actor_height}, }, <!-- END entry:loop --><!-- END unit:loop —> <!-- END_MODULE Entry_Summary --> ] } a-blog cmsͷ
 ϞδϡʔϧͰ
 σʔλ഑ྻΛ࡞Δ ˞࣮ࡍʹ͸΋ͬͱ௕͍ίʔυͰ͢ ˞΋ͬͱεϚʔτͳํ๏͕͋Δ͚Ͳ ɹࠓͷͱ͜Ζ͸͜ΕͰ
  9. let app = new Vue({ el: '#app', data: data, })

    ഑ྻΛ
 ΞϓϦέʔγϣϯͰ
 ࢖͏σʔλͱͯ͠
 ඥ෇͚Δ
  10. ಡΈࠐΜͩͱ͖ʹ
 ഑ྻΛγϟοϑϧͨ͠ let app = new Vue({ el: '#app', data:

    data, }) app.items = shuffle( app.items ); ΞϓϦέʔγϣϯ໊ม਺Λૢ࡞͢Δͱଈ൓ө͞ΕΔʂ IUUQTXXXOYXPSMEOFUKTBSSBZTIV⒐FIUNM
  11. let methods = { itemsort(index) { const funcs = {

    'id': function( items ){ // ID順に並び替え }, 'height': function( items ){ // 身長順に並び替え }, 'syllabary': function( items ){ // 五十音順に並び替え }, 'age': function( items ){ // 50歳以上の人を抜き出す }, // 以下略 引数を調べて実行 } } ࣮ߦ͍ͨ͠ॲཧΛ
 ΦϒδΣΫτͱͯ͠
 ఆ͓ٛͯ͘͠
  12. let app = new Vue({ el: '#app', data: data, methods:

    methods, }) ΦϒδΣΫτΛ
 ΞϓϦέʔγϣϯͰ
 ࢖͏ॲཧͱͯ͠
 ඥ෇͚Δ όʔδϣϯͰ͸ผͷํ๏͕͋Γ·͢ ͜Ε͸όʔδϣϯ·Ͱͷํ๏Ͱ͢
  13. transition-groupͰғΉ <div id=“app”> <transition-group name=“actors"> <div v-for="item in items" v-bind:key="item.id">

    【男優の情報を繰り返し表示】 </div> </transition-group> </div> ਖ਼ࣜʹ͸ίϯϙʔωϯτͱ͍͍·͢
  14. { "items": [ <!-- BEGIN_MODULE Entry_Summary id="summary_actor_all" —> <!-- BEGIN

    unit:loop --><!-- BEGIN entry:loop --> { "id": "{eid}", "name": "{title}", "image_src": “https://example.com%{MEDIA_ARCHIVES_DIR}{actor_photo@path}”, "furigana": "{actor_furigana}", "age": "{actor_birth}[age]", "height": "{actor_height}" }<!-- BEGIN glue -->,<!-- END glue --> <!-- END entry:loop --><!-- END unit:loop —> <!-- END_MODULE Entry_Summary --> ] } ςϯϓϨʔτͰ
 JSONΛ
 ࡞ͬͯ͠·͓͏ ΍΍ߥͬΆ͍Ͱ͕͢
  15. ͹ʔ΂͍ͨΉ @verbatim <div id="app"> {{ message }} </div> @endverbatim !WFSCBUJNϒϩοΫͰ

    ғΜͩՕॴ͸ ೾Χοί͕ల։͞Ε·ͤΜ IUUQTEFWFMPQFSBCMPHDNTKQEPDVNFOUUFNQMBUFWFSCBUJNIUNM