道具可以被动反应吗?

时间:2018-05-17 14:28:29

标签: javascript vue.js vue-component

我正在撰写一个通过prop接收数据的组件,修改该数据,然后$emit将其更改回父级(在更改后,它也位于watched )。

prop可以被动吗?或者,如何为反应属性分配道具?

我试图通过以下方式避免这个问题:

  • props: ["receiveddata"]
  • data(例如hello: ''
  • 中定义反应属性 {li} in mounted()确保this.hello = this.receiveddata

我希望此时this.hello能够传送receiveddata道具带来的内容,并从那时开始this.hello上的工作(即:修改它,观看它和相关时$emit

但是,在查看DevTools中的值时,我看到了

  • this.hello未定义
  • this.receiveddata正确保存传递给组件的数据

我的结论是,当在mounted()中时,道具值尚未知晓(因此undefined的{​​{1}}),此this.receiveddata被分配给this.hello ,然后后来undefined被填充(但对我来说太迟了)。

换句话说,我将我的this.receiveddata插入了错误的位置,但我真的不知道它可以去哪里(我也尝试将this.hello = this.receiveddata更改为mounted())< / p>

1 个答案:

答案 0 :(得分:0)

我可能不会100%理解,但我认为这就是你所追求的目标。

在这种情况下,我通常使用带有getter和setter的计算属性。

props: {
  someProp: String,
},
computed: {
  somePropLocal: {
    get () {
      return this.someProp
    },
    set (value) {
      this.$emit('input', value)
    },
  },
}

通过这种方式,您可以自由地执行此操作,并将发出正确的值。

this.somePropLocal = 'Whatever'

此外,如果父母也直接更改somePropLocal,则会更新securityDefinitions: client_secret: type: apiKey description: '' in: header name: X-Client-Secret client_id: type: apiKey description: '' in: header name: X-Client-Id security: - client_secret: [] client_id: []