从vuejs组件中的created hook调用方法

时间:2018-04-17 07:29:01

标签: vuejs2 vue-component

我有一个包含以下(部分)代码的组件:

export default {

  methods: {
    mymethod: (x) => {alert(x)},
  },

  created: () => {
    this.mymethod('success');
  },

我收到以下错误:

vue.esm.js?efeb:578 [Vue warn]: Error in created hook: "TypeError: Cannot read property 'mymethod' of undefined"

看起来好像是"这个"没有被评估到组件的vue实例。 还有什么想法呢?

3 个答案:

答案 0 :(得分:7)

在定义Vue方法,生命周期方法,计算属性时,...最好不要使用箭头函数,因为这样就会覆盖Vue本身推送的this。试试这个:

export default {
  methods: {
    mymethod (x) { alert(x) },
  },
  created () {
    this.mymethod('success');
  },
  ...
}

答案 1 :(得分:1)

您已在创建的挂钩中使用箭头功能。而是尝试使用

created: function {
   this.mymethod('success');
},

如果您查看明确说明的vue.js文档

不要在选项属性或回调上使用箭头功能,例如created:()=&gt; console.log(this.a)或vm。$ watch('a',newValue =&gt; this.myMethod())。由于箭头函数绑定到父上下文,因此它不会像您期望的那样是Vue实例,通常会导致错误,例如Uncaught TypeError:无法读取未定义或未捕获TypeError的属性:this.myMethod不是函数。< / p>

答案 2 :(得分:1)

首先将你的钩子方法更改为:

methods: {
  mymethod(x){alert(x);}
}

然后,还要更改创建的钩子函数内的被调用方法。它必须如下所示:

created(){
  this.mymethod('success');
}

然后你就完成了!