2017-05-14 29 views
2

我使用vueJS编写项目。我曾与下面的代码组件:方法在观察者回调中不是函数vuejs

import ProjectsStore from './../stores/ProjectsStore.js'; 

export default { 
    store: ProjectsStore, 
    data() { 
     return { 
      loading: false, 
      randomProject: null, 
     } 
    }, 
    computed: { 
     projects() { 
      return this.$store.state.projects; 
     }, 
     commits() { 
      return this.$store.state.commits; 
     } 
    }, 
    methods : { 
     setCommit :()=> { 
      // code here 
     } 
    }, 
    watch: { 
     projects: (value) => { 
      this.setCommit() 
     } 
    }, 
    mounted() { 
     this.$store.dispatch('loadProjectsList') 
    } 
} 

我已经按照项目错误看回调:

this.setCommit is not a function 

我在回调把console.log (this),并显示一个默认的对象不是VueComponent。

我做错了什么?

感谢您的帮助。

+1

这个不是100%,但试图从'setCommit改变你的函数定义:()=> { }到'setCommit(){}'。也许项目方法也一样。 –

+0

就是这样。非常感谢你 !我是ES6的新手,我不知道其中的差别。 – amiceli

+1

没问题,我也是新手。这就是我一直这样做的方式。很高兴我能帮上忙。 –

回答

4

而不是更改语法的尝试和错误,并看看有什么作品,如果你明白为什么一段特定的代码有效,它会更好。

如VUE documentation提到:

不要实例属性(例如vm.$watch('a', newVal => this.myMethod()))使用箭头功能。由于箭头函数绑定到父上下文,因此这个将不会是Vue实例,因为您会期望它和this.myMethod将是未定义的。

如果您是es6的新功能箭头功能here是一个相当不错的箭头函数的解释这个绑定工程。

一旦你清楚再明白没有更多的试验和错误

希望我的回答是的你有所帮助

+0

回调是你*应该*使用箭头函数的一个例子。 – Bert

+0

@BertEvans是你告诉我还是问miceli谁问这个问题。抱歉有点困惑? –

+0

你。您在回答中声明:“不要在实例属性或回调中使用箭头函数”。实例属性是正确的。回调不是。 – Bert