Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to access data from inside a method

I'm new to vue.js. I'm starting to migrate my angularjs app. I'm using vue cli to generate a new simple-webpack project. This creates a new webpack+vueLoader project. Everything went smoothly but now I have an issue. on my @click event I want to change my data but I can't access the object. 'this' is not the data instance.

What am I missing here?

<template>
    <input type="radio" name="account-type" @click="setAccountType(item.id)"/><span>{{item.name}}</span>
</template>
<script>
  export default {
     data() {
        return { accountType: null
     },
     methods: { setAccountType: (typeId) => this.accountType = typeId
  }
</script>

this is not the data instance as expected and thus ui not updated. In vuejs doc i can see just addressing this is sufficient while in a method: vue js doc

Any help is appreciated.

Kind regards.

like image 862
Gal Ziv Avatar asked Dec 13 '16 11:12

Gal Ziv


1 Answers

You cannot use an arrow function to refer to this inside a Vue instance to get Vue instance data because this refers to window, the correct ES6 syntax is:

 setAccountType(typeId){
   this.accountType = typeId
 }

JSFiddle with Arrow function: https://jsfiddle.net/zxqohh0L/

JSFiddle with non arrow ES6 function: https://jsfiddle.net/zxqohh0L/1/

You can still use arrow functions inside the methods themselves.

like image 78
craig_h Avatar answered Nov 18 '22 09:11

craig_h