non-SPA

Vue for

hashrock

@hashedrock

 

 

HTML + CSS

どこがつらいか

<div class="modal fade" tabindex="-1" role="dialog">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
        <h4 class="modal-title">Modal title</h4>
      </div>
      <div class="modal-body">
        <p>One fine body…</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div><!-- /.modal-content -->
  </div><!-- /.modal-dialog -->
</div><!-- /.modal -->

でかいはつらい

<modal-dialog title="タイトル"></modal-dialog>

こうしたい

<modal-dialog title="タイトル"></modal-dialog>
<modal-dialog title="{{title}}"></modal-dialog>

handlebarsと併用

import Component from 'vue-class-component';
import * as Vue from "vue";

@Component({
  props: "title",
  template: `<div v-text="title"></div>`
})
class ModalDialog extends Vue {
  //TODO
}

コンポーネントひながた

import {ModalDialog} from "./modal-dialog"

new Vue({
  el: 'main',
  components: {
    "modal-dialog": ModalDialog,
   //増やす
  }
})

mainにマウントしてしまう

あとは全ページに
bundle.jsをロードするだけ

CSSもパーツごとに

切り分けたい

import Component from 'vue-class-component';
import * as Vue from "vue";

require("./modal-dialog.css")

@Component({
  props: "title",
  template: `<div v-text="title"></div>`
})
class ModalDialog extends Vue {
  //TODO
}

css-loader使う

利点

  • テンプレートを小さく出来る
  • 既存のRailsアプリなどへの導入
  • 退却しやすさ

あかんところ

  • サーバサイドとフロントエンドの境目が混沌とする
  • 書いてて疲れる
  • ページローディング直後の画面のがたつき

Progressive Enhancement

JavaScriptはWebページの振る舞いの拡張のみに使う

穏健派

Vue for Non-SPA

By hash rock

Vue for Non-SPA

  • 1,327