Как получить доступ к локальной переменной компонента из обратного вызова в vue? - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь установить переменную моих компонентов с помощью команды api rest. Я хотел обработать все ответы через функцию в своем собственном файле с именем handleResponse (), который находится ниже.

// api/tools/index.js
function handleResponse (promise, cb, cbError) {
  var cbErrorRun = (cbError && typeof cb === "function") 

  promise.then(function (response) {
    if (!response.error) {
      cb(response)
    }
    else if (cbErrorRun) {
      cbError(response)
    }
  }).catch(function (error) {
    console.log(error)
    if (cbErrorRun) {
      var responseError = {
        "status": 404,
        "error": true,
        "message": error.toString()
      }
      cbError(responseError)
    }
  })
}
export {handleResponse}

В моем файле компонента у меня есть

.... More above....
<script>
import { fetchStock } from '@/api/stock'    

  export default {

    data () {
      return {
        stock: {},
        tabs: [
          {
            title: 'Info',
            id: 'info'
          },
          {
            title: 'Listings',
            id: 'listings'
          },
          {
            title: 'Company',
            id: 'company'
          }
        ],
      }
    },
    validate ({params}) {
      return /^\d+$/.test(params.id)
    },
    created: function() {
      var params = {'id': this.$route.params.stockId}
      //this.$route.params.stockId}
      fetchStock(
        params,
        function(response) { //on successful data retrieval
          this.stock = response.data.payload // payload = {'name': test123}
          console.log(response)
        },
        function(responseError) { //on error
          console.log(responseError)
        }
      )
    }
  }
</script>

Текущий код выдаёт мне эту ошибку: «Uncaught (в обещании) TypeError: Невозможно установить свойство stock со значением undefinedAc». Я думаю, что это происходит, потому что у меня больше нет доступа к 'this' в обратном вызове, который я передаю в функции fetchStock. Как бы это исправить, не меняя текущий макет handleResponse.

1 Ответ

0 голосов
/ 13 мая 2018

Вы можете попробовать этот трюк

  created: function() {
      var params = {'id': this.$route.params.stockId}
      //this.$route.params.stockId}
      var self = this;
      fetchStock(
        params,
        function(response) { //on successful data retrieval
          self.stock = response.data.payload // payload = {'name': test123}
          console.log(response)
        },
        function(responseError) { //on error
          console.log(responseError)
        }
      )
    }
...