У меня есть приложение Vue (и я относительно новичок в Vue), в любом случае у меня есть универсальный модал c, который отображается при сбое любого из моих вызовов axios
.
На modal
я хочу иметь возможность повторить неудачный процесс, когда нажата кнопка «Повторить попытку» button
, но я немного пытаюсь понять, как этого добиться. Я не думаю, что props
поможет мне, поскольку modal
вызвано
VueEvent.$emit('show-error-modal')
Мне удалось в моем catch
пропустить function
, который потерпел неудачу при использовании
VueEvent.$emit('show-error-modal', (this.test));
Тогда в моем modal
у меня есть доступ к нему, используя
created() {
VueEvent.$on('show-error-modal', (processFailed) => {
console.log('processFailed', processFailed)
this.processFailed = processFailed;
$('#errorModal').modal('show').on('shown.bs.modal', this.focus);
});
}
Используя 'F12', он дает
test: function test() {
var _this2 = this;
var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
alert('boo');
this.loading = true;
var order_by = {
'ho_manufacturers.name': 4,
'services.servicename': 4
};
axios.post('/test/url', {
id: this.selectedManufacturers,
page: page,
order_by: order_by
}).then(function (response) {
var paginator = response.data.paginator;
_this2.$store.dispatch('paginateProducts', paginator);
_this2.$store.dispatch('setProductPaginator', paginator);
_this2.loading = false;
})["catch"](function (error) {
var processFailed = 'fetchProducts';
_this2.loading = false;
VueEvent.$emit('show-error-modal', _this2.test);
console.log(error);
});
},
I не думайте, что это правильный способ сделать это, так как все this.
заменены на _this2
, как показано выше. Мне нужно, чтобы modal
было обобщенным c, чтобы я мог использовать его повторно, но не могу понять, как повторить процесс при нажатии кнопки.
modals
зарегистрированы в моем app.vue
файл как
<template>
<div>
<!-- Other code here -->
<app-error-modal />
</div>
</template>
<script>
// Other code here
import ErrorModal from './components/ErrorModal';
export default {
name: 'App',
components: {
// Other code here
appErrorModal: ErrorModal
}
// Other code here
</script>
Модальная кнопка HTML
<button ref="retryButton" class="btn btn-success col-lg-2" type="submit" data-dismiss="modal" @click="retryProcess">Retry</button>
Модальный script
код
<script>
export default {
name: "ErrorModal",
created() {
VueEvent.$on('show-error-modal', (processFailed) => {
console.log('processFailed', processFailed)
this.processFailed = processFailed;
$('#errorModal').modal('show').on('shown.bs.modal', this.focus);
});
},
methods: {
focus() {
this.$refs.retryButton.focus();
},
retryProcess() {
//this.$parent.test(); TRIED THIS BUT DIDN'T WORK
}
}
}
</script>
Я бы предпочел не иметь в магазине .