vue.js - 将焦点设置为按钮时,无法读取 VUE 中未定义的属性“焦点”
问题描述
我是新手,如果失败,vue
我会调用我的通用“错误”模式。所有这些工作正常,但我不断收到以下错误:component
endpoint
无法读取未定义的属性“焦点”
这只发生在else
我的method
function
.
对于这个特定问题,我的 'failedPrcess' 等于以下任何一项,这是我得到的时候,所有其他人都很好:
- 存在订单搜索产品订单
- stockSearchStockLevels
- 购物车FetchCouriers
代码
<template>
<div class="modal fade danger-modal" id="errorModal" tabindex="-1" role="dialog" aria-labelledby="errorModalTitle" aria-hidden="true"
data-keyboard="false" data-backdrop="static" style="z-index: 99999">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content danger-modal-content">
<div class="modal-header danger-modal-headerfooter">An error has occurred</div>
<div class="modal-body">
<p v-if="failedProcess === 'appGetAccount' || failedProcess === 'existOrderSearchProdOrders' || failedProcess === 'stockSearchStockLevels'
|| failedProcess === 'cartFetchCouriers'">
{{ contactTxt | capitalize }}
</p>
<p v-else-if="errorCount < 3">If the error continues, {{ contactTxt }}</p>
<p v-else>As the error has continued, {{ contactTxt }}</p>
<p>
<b>
01234 567890
<br />
Open from 00:00 to 07:00
</b>
</p>
<p>Advising of what you were doing when the error occurred.</p>
</div>
<div class="modal-footer danger-modal-headerfooter">
<a v-if="failedProcess === 'appGetAccount'" ref="logoutButton" class="btn btn-primary" :class="logoutButtClicked" @click="logoutClicked = true" href="/site/logout">
<span v-if="!logoutClicked" id="logoutButtonLabel">Logout</span>
<span v-else id="logoutSpinner">
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
Logging out
</span>
</a>
<router-link v-else-if="failedProcess === 'fetchOrderReportDetails'" to="/review" tag="button"
ref="existOrdersButton" class="btn btn-primary" type="button" data-dismiss="modal" @click.native="closeButton">
Return to existing orders
</router-link>
<button v-else-if="errorCount < 3 && (failedProcess !== 'productsFetchProducts' && failedProcess !== 'existOrderSearchProdOrders'
&& failedProcess !== 'stockSearchStockLevels' && failedProcess !== 'cartFetchCouriers')" ref="closeButton" class="btn btn-primary"
type="button" data-dismiss="modal" @click="closeButton">
Close
</button>
<router-link v-else to="/" tag="button" ref="homeButton" class="btn btn-primary" type="button" data-dismiss="modal" @click="closeButton">
Return to homepage
</router-link>
</div>
</div>
</div>
</div>
</template>
<script>
import * as params from '../params';
export default {
name: "ErrorModal",
data() {
return {
contactTxt: 'please contact us on:',
errorCount: 0,
failedProcess: '',
}
},
mounted() {
VueEvent.$on('show-error-modal', (failedProcess) => {
if (this.failedProcess !== failedProcess) {
this.errorCount = 0;
}
this.failedProcess = failedProcess;
$('#errorModal').modal('show').on('shown.bs.modal', this.focus);
});
},
methods: {
focus() {
if (this.failedProcess === 'appGetAccount') {
this.$refs.logoutButton.focus();
} else if (this.failedProcess === 'fetchOrderReportDetails') {
this.$refs.existOrdersButton.$el.focus();
} else if (this.errorCount < 3 && this.failedProcess !== 'productsFetchProducts') {
this.$refs.closeButton.focus();
} else {
this.$refs.homeButton.$el.focus();
}
},
}
}
</script>`enter code here`
解决方案
我之前尝试过使用v-if
,我也遇到过类似的问题,我发现最好的解决方案是,而不是使用v-if
/ v-else-if
/ v-else
,而是使用v-show来执行条件渲染。
此外,正如 Vue.js 文档所说:
一般来说,v-if 的切换成本较高,而 v-show 的初始渲染成本较高。因此,如果您需要经常切换某些东西,则更喜欢 v-show,如果条件不太可能在运行时改变,则更喜欢 v-if。
推荐阅读
- jasmine - Jasmine UI 自动化
- ios - xCode 9.4.1 没有为团队找到具有 iTunes 连接访问权限的帐户
- python - 如何在 Python 中相互初始化的多个类之间正确共享命令行参数
- reactjs - 在reactjs中如何在选择下拉值时获取动态行
- python - 在 python 中使用 Stanford Corenlp for Chinese
- python - python pyautogui 与 pynput 一起工作
- php - 如何从图像 url 获取图像名称和图像扩展名
- ios - 如何在登录用户通过 Facebook 在 firebase for ios swift 中登录后检查?
- python - 如何在 SVM 中操作多维特征或使用多维特征训练模型?
- ios - 如果在类扩展中声明的任何方法都是静态的,我会感到困惑