Vue: 配列のサブクラス化をサポート

作成日 2018年12月27日  ·  3コメント  ·  ソース: vuejs/vue

バージョン

2.5.21

複製リンク

https://codepen.io/AmrIKhudair/pen/NevxML

再現する手順

1-配列を拡張するクラスを作成し、カスタムメソッドを追加します
2-クラスの新しいインスタンスをインスタンス化し、それをデータに追加します
3-テンプレート内のインスタンスでメソッドを呼び出そうとします

何が期待されますか?

メソッドは正常に実行されます

実際に何が起こっているのですか?

エラーは機能ではありません

feature request

最も参考になるコメント

@AmrIKhudair
私もこれが必要で、ユーザーランドで機能するようにしました。 Vue 3が到着したら、削除できます。

export function makeReactive (obj) {
  // eslint-disable-next-line no-proto
  const proto = obj.__proto__

  Object.defineProperty(obj, '__proto__', {
    get () { return proto },
    // eslint-disable-next-line no-proto
    set (newValue) { proto.__proto__ = newValue }
  })
}
import { makeReactive } from 'util'

export default class UserCollection extends Array {
  constructor (...args) {
    super(...args)

    makeReactive(this)
  }
}

全てのコメント3件

Vue 2は現在、配列のサブクラス化をサポートしていません(Vue 3開発ブランチはすでにサポートしています)。 これを機能リクエストに変換します。

@AmrIKhudair
私もこれが必要で、ユーザーランドで機能するようにしました。 Vue 3が到着したら、削除できます。

export function makeReactive (obj) {
  // eslint-disable-next-line no-proto
  const proto = obj.__proto__

  Object.defineProperty(obj, '__proto__', {
    get () { return proto },
    // eslint-disable-next-line no-proto
    set (newValue) { proto.__proto__ = newValue }
  })
}
import { makeReactive } from 'util'

export default class UserCollection extends Array {
  constructor (...args) {
    super(...args)

    makeReactive(this)
  }
}

@edcoreweb
どうもありがとう

このページは役に立ちましたか?
0 / 5 - 0 評価