yuheijotaki.com

フォーム入力バインディングを理解する その9

f:id:jotaki:20190212100544p:plain

何年か前に jQuery で作った type tester という簡易的なフォント(関連のスタイリング)のテスターツールを Vue.js で作ってみる。 その9

GitHub Pages: https://yuheijotaki.github.io/type-tester/
GitHub リポジトリ:https://github.com/yuheijotaki/type-tester


methods: でアロー関数が使えない

せっかくVue CLI 使ってwebpackも入ってES6使えるのだからアロー関数とか使おうと思ってたのですが、methods: の function に対しては this の参照が期待通りにならないので使えないとのことでした。。

公式ドキュメント https://jp.vuejs.org/v2/api/index.html#methods

メソッド(例 plus: () => this.a++) を定義するためにアロー関数を使用すべきではないことに注意してください。

App.vue(抜粋)

// アロー関数を使う(ダメな例)
methods: {
  toggleCss: () => {
    this.displayCss = !this.displayCss;
  },
  ...

// アロー関数を使わない(よい例)
methods: {
  toggleCss: function () {
    this.displayCss = !this.displayCss;
  },
  ...

vue-head を使って meta / OGP 設定をする

今回はSPAではないので特に難しいことせずに index.html にmeta / OGP 設定は直書きできるのですが、今後のために動的生成とページごと設定を実現したいので vue-head を使ってみました。

Vue CLIを使っている場合になります。
まずインストール

$ npm install vue-head --save

/src/main.js

...
import VueHead from 'vue-head'

Vue.use(VueHead)
...

/src/App.vue

...
  data() {
    return {
      metaTitle: 'site title'
    },
  },
  head: {
    title: function () {
      return {
        inner: this.metaTitle
      }
    },
    meta: [
      { name: 'description', content: 'My description', id: 'desc' }
    ]
  }
...

のようにdataから動的生成する場合は title: function () { return … のように指定する。

JSで書き換えが行われるので静的HTMLでなく検証ツールでの確認が必要。

他の設定項目は Github のドキュメントが詳しいです。
OGP / Twitter / Schema.org の設定、Google Analytics もできるみたい。 https://qiita.com/buchiya4th/items/dd8f16dfcd296bd247bb
案件で使ったらこれだけで記事書きたいなと思います。

次やること

  • localStorage 使ってリロード対策
  • 全体スタイリング