web-dev-qa-db-ja.com

Vue.jsミックスインはオーバーライドされた実装で親メソッドを呼び出します

プロジェクトで vuejs-datepicker コンポーネントを使用していますが、カスタム動作が必要なため、独自のdatepickerを作成し、vuejs-datepickerをミックスインとして挿入することにしました。解決策は正常に機能しますが、オーバーライドされたメソッド内で親メソッドを呼び出す方法を探しています。これが私のコンポーネントが今のところどのように見えるかです:

_  import Datepicker from 'vuejs-datepicker'

  export default {
    props: {
      /**
       * My custom property startDate to open a calendar on the given date by default
       */
      startDate: {
        validator: function (val) {
          return val === null || val instanceof Date || typeof val === 'string'
        },
        default: new Date()
      }
    },

    mixins: [ Datepicker ],

    methods: {
      /**
       * I override parent method setPageDate to read default startDate when none is specified
       */
      setPageDate (date) {
        // my code to set default date from the property
        if (!date) {
          date = this.startDate
        }

        // this part is the same as in the original method
        this.pageDate = new Date(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes()).getTime()
      }
    }
  }
_

コピーされたコードの1行だけは大したことではありませんが、将来的にはさらに多くのメソッドをオーバーライドする必要があると思います。そのため、実装内でその親メソッドを呼び出すための最良の方法を探しています。たとえば、this.parent(date)this.super(date)などです。それは可能ですか?

12
ConstantineUA

superなどはありません。あなたできたこのようなことをする:

  setPageDate (date) {
    // my code to set default date from the property
    if (!date) {
      date = this.startDate
    }

    Datepicker.methods.setPageDate.call(this, date)
  }
18
Bert