Vue公司的模式是props下来events了。这听起来很简单,但在编写自定义组件时很容易忘记。
从 Vue 2.2.0 开始,您可以使用v-model(带有计算属性)。我发现这种组合在组件之间创建了一个简单、干净且一致的接口:
props传递给您的组件的任何内容都保持react性(即,它不会被克隆,也不需要watch在检测到更改时更新本地副本的函数)。 
- 更改会自动发送到父级。
 
- 可以与多个级别的组件一起使用。
 
计算属性允许分别定义 setter 和 getter。这允许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计算出的属性在组件内提供了一个简单的getter和setter接口(认为它像被一个私有变量)。在#task-template您可以渲染listLocal并且它将保持react性(即,如果parentList更改它将更新Task组件)。您还可以listLocal通过调用 setter(例如this.listLocal = newList)来改变它,它会将更改发送给父级。
这种模式的优点在于您可以传递listLocal给Task(using 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。