Javascript Vue js watcher不会对更改做出反应

Javascript Vue js watcher不会对更改做出反应,javascript,vue.js,vue-component,Javascript,Vue.js,Vue Component,我已经看到了一些关于vue.js watchers的问题,但我没有找到一个解决我的问题的问题,所以这里是: 在我的SomeComponent.vue中,我使用以下代码: ... props: ['value'] , watch: { value(val) { console.log(val); } }, 在使用此组件的父vue页面中,我使用了以下功能: <template> <div> <SomeCompon

我已经看到了一些关于vue.js watchers的问题,但我没有找到一个解决我的问题的问题,所以这里是:

在我的SomeComponent.vue中,我使用以下代码:

...
props: ['value']
,
watch: {
    value(val) {
        console.log(val);
    }
},
在使用此组件的父vue页面中,我使用了以下功能:

<template>
    <div>
        <SomeComponent
            v-model="test"
        ></SomeComponent>
    </div>
</template>
data() {
    return {
        test: {}
    };
},
created() {
    this.test = this.DoSomething();
},

这是因为您的
道具
是一个
对象

要深入观察,您可以这样做:

watch: {
    value: {
        handler(val) {
          console.log(val);
        },
        deep: true
    }
},
而在
created
DOM中还没有呈现。所以,您发送给子组件的道具尚未更新

和其他答案一样,更改对象的正确方法是使用
this.$set

  mounted() {
    this.$set(this.test, 'Prop1', this.DoSomething())
    this.$set(this.test, 'Prop2', 'Test')
  },

这是因为您的
道具
是一个
对象

要深入观察,您可以这样做:

watch: {
    value: {
        handler(val) {
          console.log(val);
        },
        deep: true
    }
},
而在
created
DOM中还没有呈现。所以,您发送给子组件的道具尚未更新

和其他答案一样,更改对象的正确方法是使用
this.$set

  mounted() {
    this.$set(this.test, 'Prop1', this.DoSomething())
    this.$set(this.test, 'Prop2', 'Test')
  },
如报告中所述:

由于JavaScript的限制,Vue无法检测到某些类型的更改。然而,有一些方法可以绕过它们来保持反应性

用于对象

Vue无法检测到属性的添加或删除。由于Vue在实例初始化期间执行getter/setter转换过程,因此
数据
对象中必须存在一个属性,以便Vue对其进行转换并使其响应。例如:

Vue不允许向已创建的实例动态添加新的根级别被动属性。但是,可以使用
this.$set(object,propertyName,value)
方法向嵌套对象添加被动属性:

在您的情况下,这将是:

created() {
    this.$set(this.test, 'Prop1', this.DoSomething())
    this.$set(this.test, 'Prop2', "Test")
},
或者,您也可以将许多属性指定给现有对象,例如,使用
object.assign()

this.test = Object.assign({}, this.test, { 'Prop1': 1, 'Prop2': 2 })
如报告中所述:

由于JavaScript的限制,Vue无法检测到某些类型的更改。然而,有一些方法可以绕过它们来保持反应性

用于对象

Vue无法检测到属性的添加或删除。由于Vue在实例初始化期间执行getter/setter转换过程,因此
数据
对象中必须存在一个属性,以便Vue对其进行转换并使其响应。例如:

Vue不允许向已创建的实例动态添加新的根级别被动属性。但是,可以使用
this.$set(object,propertyName,value)
方法向嵌套对象添加被动属性:

在您的情况下,这将是:

created() {
    this.$set(this.test, 'Prop1', this.DoSomething())
    this.$set(this.test, 'Prop2', "Test")
},
或者,您也可以将许多属性指定给现有对象,例如,使用
object.assign()

this.test = Object.assign({}, this.test, { 'Prop1': 1, 'Prop2': 2 })

欢迎光临。我认为在创建的
中更改
不会触发
监视
,因为值在发送到子组件之前会更改。欢迎光临。我认为在创建的
中更改不会触发
监视
,因为值在发送到子组件之前会更改。