2016-12-22 1 views
1

Это мой Mixin в Vue.js:Vue.js Mixin не работает должным образом в компоненте

var myMixin = { 
    data() { 
     clockInt: '',   
     clock: '', 
     currentTime: new Date() 
    }, 
    mounted() { 
     this.intervalSetup(); 
    }, 
    methods: { 

     intervalSetup() { 
      var _this = this; 

      // init 
      this.getTime(); 

      // start interval every 60s 
      this.clockInt = setInterval(
       _this.getTime(), 60000 
      ); 
     }, 

     getTime() { 
      var now = this.currentTime, 
       h = now.getHours(), 
       m = now.getMinutes(); 

      this.clock = h + ':' + m; 
     } 

    } 
}; 

Это должно отображать простые цифровые часы, которые устанавливает время каждые 60-е годы.

Затем я зарегистрировать подмешать к Vue, требуют моего компонента и начать новый экземпляр Vue:

Vue.component('comp', require('./components/MyComponent.vue')); 

Vue.mixin(myMixin); 

const app = new Vue({ 
    el: '#app' 
}); 

Мой компонент выглядит следующим образом:

<template> 
    <div>{{ clock }}</div> 
</template> 

<script> 
    export default { 
     data() { 
      return { 
       someData: [] 
      } 
     }, 
     mounted() { 

      // call methods 

     }, 
     methods: { 

     // some methods 

     } 
    }; 
</script> 

Первый INIT в Mixin метод работает отлично, и, как я вижу в инструменте Vue dev, все данные также присутствуют. Но он не обновляет данные в интервале, который я установил.

Надеюсь, у кого-то были подобные проблемы и он может мне помочь.

+2

Вы можете попробовать сначала: 'Vue.mixin (myMixin);' чем определить компонент: 'Vue.component ('comp', re ...'. – Saurabh

+0

Это имеет тот же эффект. Первая инициализация работает отлично, но интервал не обновляет данные. –

+1

IMOP Я думаю, что вы должны пойти с компонентом для часов вместо mixin, имеет больше смысла для меня. И глобальные миксины - это не очень хорошо, вы должны использовать его, только если вы действительно нужна определенная функциональность в каждом из ваших экземпляров vue. – AfikDeri

ответ

0

Ну, ребята. Оба решения работают точно так, как ожидалось, - как один компонент и как mixin. Хорошо знать.

Вопрос был currentTime: new Date(). Время даты было объявлено в объекте данных только один раз. Таким образом, интервал всегда принимал эту временную метку.

Я только что удалил это и сменил var now = new Date(); в моем методе mixin.

Спасибо, ребята!

Смежные вопросы