title: Hook=componentUpdated of Vue directive not triggered
body: <p>I just met one issue, if one component only update its own data, it will not trigger the hook=<strong>componentUpdated</strong> of the directive at the parent component.</p>
  <p>As <a href="https://v2.vuejs.org/v2/guide/custom-directive.html#Hook-Functions" rel="nofollow noreferrer">Vue official Guide</a> said:</p>
  <blockquote>
  <p>componentUpdated: called after the containing component’s VNode and
  the VNodes of its children have updated.</p>
  </blockquote>
  <p>It seems <strong>componentUpdated</strong> should be triggered.</p>
  <p>Did I do something wrong? or misunderstand something?</p>
  <p>At below demo, hit <strong>Click Me!</strong> button then you will see <strong>componentUpdated</strong> is not called.</p>
  <p>But when click <strong>change data</strong> (execute similar behavior with <strong>click me!</strong>, the difference is it changes the data at parent component), it will trigger correctly.</p>
  <p>Many thanks for any.</p>
  <p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
  <div class="snippet-code">
  <pre class="snippet-code-js lang-js prettyprint-override"><code>Vue.config.productionTip = false
  Vue.component('child', {
    template: `&lt;div&gt;{{point}}
                  &lt;span style="background-color:gray;font-weight:bold;color:red"&gt;
                    -{{mytest}}
                  &lt;/span&gt;
                  &lt;button @click="plusOne()"&gt;Click me!&lt;/button&gt;
               &lt;/div&gt;`,
    props: ['point'],
    data(){
      return {
        mytest: 1
      }
    },
    updated: function () {
      console.log('updated component=child')
    },
    methods: {
      plusOne() {
        this.mytest += 1
      }
    }
  })
  
  let vMyDirective = {}
  vMyDirective.install = function install (Vue) {
  
    Vue.directive('my-directive', {
      inserted: function () {
        console.log('!!!directive for inserted')
      },
      bind: function bind (el, binding, vnode) {
        console.log('!!!directive for bind')
      },
      componentUpdated: function componentUpdated (el, binding, vnode) {
        console.log('!!!directive for component updated')
      },
      update: function () {
        console.log('!!!directive for update')
      }
    })
  }
  
  Vue.use(vMyDirective)
  
  new Vue({
    el: '#app',
    data() {
      return {
        testValues: ['label a', 'label b'],
        testIndex: 1
      }
    },
    methods:{
      pushArray: function() {
        this.testValues.push('label c')
      },
      changeData: function () {
        this.testIndex += 1
      }
    }
  })</code></pre>
  <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"&gt;&lt;/script&gt;
  &lt;div id="app"&gt;
    &lt;button v-on:click="pushArray()"&gt;Add one Child!!!&lt;/button&gt;
    &lt;button v-on:click="changeData()"&gt;Change Data - {{testIndex}}&lt;/button&gt;
    &lt;div v-my-directive&gt;
      &lt;child v-for="(item, index) in testValues" :key="index" :point="item"&gt;&lt;/child&gt;
    &lt;/div&gt;
  &lt;/div&gt;</code></pre>
  </div>
  </div>
  </p>