没有模板的vuejs反应

时间:2017-05-03 05:39:44

标签: javascript vue.js vuejs2

我有一个Vue组件,其中一个空模板需要监听prop更改:

// component.vue
<template>
</template>

<script>
  export default {
    props: ['mode'],
    updated: function() {
      console.log('updated!')
    }
  }
</script>

//parent.vue
<template>
  ...
  <childcomponent :mode="variable"></childcomponent>
</template>
...

现在,当父母variable发生变化时,我希望可以调用childcomponent.updated。但是,如果在儿童模板中使用道具,似乎只会发生这种情况。

到目前为止,我想出的唯一解决方法是将子组件的模板设置为<div v-show="false>{{ mode }}</div>,但这看起来真的不对吗?有没有更好的方法来解决我的问题?

我首先使用空模板的原因是因为组件与js库交互,后者自己执行一堆DOM操作。

1 个答案:

答案 0 :(得分:7)

如果您不需要创建任何DOM元素,可以使用watch道具并使用空的render函数:

new Vue({
  el: '#app',
  data: {
    word: ''
  },
  components: {
    'child' : {
      props: ['myprop'],
      watch: {
      	myprop: function(n, o) {
          console.log('changed to: ', n)
        }
      },
      render: function(h) {
      	return h() // avoid warning message
      }
    }
  }
});
<script src="https://unpkg.com/vue/dist/vue.js"></script>

<div id="app">
  <child :myprop="word"></child>
  <button @click="word = 'one'">One</button>
  <button @click="word = 'two'">Two</button>
  <button @click="word = 'three'">Three</button>
</div>