Vueパターンがprops上下しeventsています。シンプルに聞こえますが、カスタムコンポーネントを作成するときに忘れがちです。
Vue 2.2.0以降では、vモデル(計算されたプロパティ)を使用できます。この組み合わせにより、コンポーネント間にシンプルでクリーンで一貫性のあるインターフェイスが作成されることがわかりました。
- propsコンポーネントに渡されたものはすべて無効のままです(つまり、複製されず- watch、変更が検出されたときにローカルコピーを更新する機能も必要ありません)。
- 変更は自動的に親に送信されます。
- 複数のレベルのコンポーネントで使用できます。
計算されたプロパティを使用すると、セッターとゲッターを別々に定義できます。これにより、Taskコンポーネントを次のように書き換えることができます。
Vue.component('Task', {
    template: '#task-template',
    props: ['list'],
    model: {
        prop: 'list',
        event: 'listchange'
    },
    computed: {
        listLocal: {
            get: function() {
                return this.list
            },
            set: function(value) {
                this.$emit('listchange', value)
            }
        }
    }
})  
モデルプロパティ定義propに関連付けられv-model、イベントが変更に放出されます。次に、このコンポーネントを親から次のように呼び出すことができます。
<Task v-model="parentList"></Task>
listLocal計算されたプロパティは、(プライベート変数であることのようにそれを考える)コンポーネント内の単純なゲッターとセッターのインターフェイスを提供します。#task-templateあなたの中でレンダリングすることができlistLocal、それは反応的なままです(つまり、parentList変更するとTaskコンポーネントを更新します)。listLocalセッター(例:)を呼び出しthis.listLocal = newListて変更することもでき、変更を親に送信します。
このパターンの優れている点はlistLocal、Task(を使用してv-model)の子コンポーネントに渡すことができ、子コンポーネントからの変更が最上位コンポーネントに伝達されることです。
たとえばEditTask、タスクデータになんらかの変更を加えるための個別のコンポーネントがあるとします。同じv-modelプロパティと計算されたプロパティのパターンをlistLocal使用して、コンポーネントに(を使用してv-model)渡すことができます。
<script type="text/x-template" id="task-template">
    <div>
        <EditTask v-model="listLocal"></EditTask>
    </div>
</script>
EditTask変更を発行する場合、それは適切に呼び出さset()れlistLocal、それによってイベントをトップレベルに伝播します。同様に、EditTaskコンポーネントはを使用して他の子コンポーネント(フォーム要素など)を呼び出すこともできv-modelます。