Vuex this. $ Store не определено в «монтированном» хуке жизненного цикла - PullRequest
0 голосов
/ 14 мая 2019

В настоящее время я интегрирую сервис Paypal в свой проект Vue.Я сослался на официальный документ и скопировал код https://developer.paypal.com/docs/checkout/integrate/#6-verify-the-transaction. Я смог отобразить кнопку Paypal, завершить транзакцию и получить идентификатор заказа.Однако я не могу отправить orderID на мой сервер из-за следующей ошибки: this. $ Store не определено. Обратите внимание, что , я смог сослаться на это. $ Store в моих других компонентах .Ниже приведен мой следующий код:

Обновление : я попытался console.log (this) в методе onApprove, и он возвращает неопределенное значение.Это проблема?

Обновление Я преобразовал метод OnApprove и метод capture () в функцию arrow и получил другое сообщение об ошибке this. $ Store.dispatch (...).then (...). err не является функцией

Обновление Мне удалось исправить вышеуказанную ошибку, изменив .err () на .catch ().

Обновление Я столкнулся с другой проблемой, иногда при нажатии на кнопку Paypal внешнее окно Paypal немедленно закрывается.Я должен нажать на кнопку несколько раз, чтобы предотвратить это странное поведение.Я пошел в журнал консоли и нашел это сообщение, как показано на следующем снимке экрана.

enter image description here

    <template>
  <div>
    <div id="paypal-button-container"></div>
  </div>
</template>

<script>
import { PRODUCT_PAYPAL } from "@/store/actions/products";

export default {
  mounted() {
    paypal
      .Buttons({
        createOrder: function(data, actions) {
          return actions.order.create({
            purchase_units: [
              {
                amount: {
                  value: "0.01"
                }
              }
            ]
          });
        },
         onApprove: (data, actions) => {
          return actions.order.capture().then(details => {
            alert("Transaction completed by " + details.payer.name.given_name);
            console.log("orderID is ");
            console.log(data.orderID);

            // Call your server to save the transaction
            return this.$store
              .dispatch(PRODUCT_PAYPAL, data.orderID)
              .then(() => {
                alert("success");
              })
              .catch(() => {
                alert("error");
              });
          });
        }
      })
      .render("#paypal-button-container");
  }
};
</script>

<style>
</style>

Как показано на следующем снимке экрана, я смог получить orderID, что означает, что транзакция прошла успешно.Однако этот. $ Store не определен.Поэтому я не могу отправить идентификатор заказа на свой сервер

enter image description here

1 Ответ

1 голос
/ 14 мая 2019

Используйте функцию стрелки в функции обратного вызова, чтобы иметь доступ к this .

onApprove: (data, actions) => ...

return actions.order.capture().then((details) => ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...