VueJs2.0-如何监听“Pros”更改?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (988)

在VueJs2.0文档(https://vuejs.org/v2/guide/instance.html)我找不到任何可以监听props 的改变。

VueJ有这样的hook吗?onPropsUpdated()或者类似的?

我试着watch我的属性但什么都没变。然后我意识到我有个特例:

<template>
    <child :my-prop="myProp"></child>
</template>

<script>
   export default {
      props: ['myProp']
   }
</script>

我传递myProp,父组件接收到child组件。然后watch: {myProp: ...}不起作用了。

提问于
用户回答回答于

不确定你是否解决了这个问题(以及我是否正确理解),但我的想法如下:

如果父程序接收到myprop,并且你希望它传递给子节点并在子节点中查看它,那么父程序必须有myProp的副本(而不是引用)。

试试这个:

new Vue({
  el: '#app',
  data: {
    text: 'Hello'
  },
  components: {
    'parent': {
      props: ['myProp'],
      computed: {
        myInnerProp() { return myProp.clone(); } //eg. myProp.slice() for array
      }
    },
    'child': {
      props: ['myProp'],
      watch: {
        myProp(val, oldval) { now val will differ from oldval }
      }
    }
  }
}

在html中:

<child :my-prop="myInnerProp"></child>

实际上,在这种情况下处理复杂集合时,必须非常小心。

用户回答回答于

你可以的。watch支持在props更改时执行某些代码:

new Vue({
  el: '#app',
  data: {
    text: 'Hello'
  },
  components: {
    'child' : {
      template: `<p>{{ myprop }}</p>`,
      props: ['myprop'],
      watch: { 
      	myprop: function(newVal, oldVal) { // watch it
          console.log('Prop changed: ', newVal, ' | was: ', oldVal)
        }
      }
    }
  }
});
<script src="https://unpkg.com/vue/dist/vue.js"></script>

<div id="app">
  <child :myprop="text"></child>
  <button @click="text = 'Another text'">Change text</button>
</div>

扫码关注云+社区

领取腾讯云代金券