PIYO - Tech & Life -

Vue Componentインスタンスの関数を呼び出す方法

Vue JS

Vue Componentの関数、具体的にはvuejs-datepickersetDateを呼び出すのってどうするの?というのでちょっと迷ったのでメモ。

https://github.com/charliekassel/vuejs-datepicker

このdatepickerをインライン表示で使おうとしてるんですが、Todayボタンがなさそうなのが不便なので自分でボタンを置いて作ろうとしました。

なんですが、設定する方法がわからず。

最初v-model="date"とかやっておけば勝手に反映されるかなと思ったんですが違いましてね。

なんとなくコードを読んだことでdatepicker自体にsetDateなる関数があることはわかっていたので、それを呼べばいいんだろうと思ったものの、じゃあどうやってアクセスするの?と。

結論からいうと、ref属性で大丈夫でした。ドキュメントにも書いてあった。

https://jp.vuejs.org/v2/guide/components-edge-cases.html#%E5%AD%90%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%A8%E5%AD%90%E8%A6%81%E7%B4%A0%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9

なので、Todayボタンを実現するためのコードはこんな感じになりました。

<template>
    <div>
        <datepicker v-model="date" :inline="true" :language="ja" ref="picker"></datepicker>
        <a class="btn btn-primary" @click="todayClick">
            今日
        </a>
    </div>
</template>

<script>
  import Datepicker from 'vuejs-datepicker';
  import {ja} from 'vuejs-datepicker/dist/locale'

  export default {
    data: () => {
      return {
        date: new Date(),
        ja
      }
    },
    components: {
      Datepicker,
    },
    methods: {
      todayClick() {
        this.$refs.picker.setDate(new Date());
      },
    },
  }
</script>