html - 使用 vue.js 进行条件渲染
问题描述
我正在尝试根据用户是在桌面还是移动设备上更改电子邮件字段的输入类型。
我添加了一种检测用户是否在移动设备上的方法
get isMobile() {
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
return true;
} else {
return false;
}
}
我尝试在 html 文件中实现它,如下所示
<form-field :label="label">
<span class="mandatory_field" v-if="required">*</span>
<div v-if="!isMobile()">
<desktop>
<input v-bind:class="inputStyle"
type="text"
:id="id"
:name="name"
@input="$emit('input',$event.target.value)"
:placeholder="placeholder"
:value="value"
/>
</desktop>
</div>
<div v-else>
<mobile>
<input v-bind:class="inputStyle"
type="email"
:id="id"
:name="name"
@input="$emit('input',$event.target.value)"
:placeholder="placeholder"
:value="value"
/>
</mobile>
</div>
<p class="field_error">{{ error }}</p>
</form-field>
但这所做的只是使电子邮件字段消失。
在 Vue.js 中实现此功能的正确方法是什么?
解决方案
您已定义isMobile
为 getter 属性。这在 Vue 中不是必需的,通常您会将其设为计算属性(“计算属性”是 Vue 特定的,请参阅文档)。
此外,您不会将其称为方法,因为它不是方法,而是属性。
<div v-if="isMobile">Mobile</div>
<div v-else>Desktop</div>
computed: {
isMobile() {
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
}
}
从技术上讲,它不必是计算属性,因为它不依赖于任何组件的数据,并且它的值永远不会改变,因此您可以将其定义为普通数据属性:
data() {
return {
isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
}
}
推荐阅读
- python - 我应该如何容器化读取 CSV 文件的 python 脚本?
- c - 如何从 Txt(C) 读取和返回随机行
- r - 如何在 R 中确定文件是否为 PDF?
- r - r 加权矩阵
- amazon-web-services - 为什么某些 AWS KMS 密钥仅显示策略视图?
- pandas - 使用加权平均值对数据框中的数据进行重新采样
- python - 如何使用 Python 3 正则表达式将工作/文件标题与可选元素匹配
- php - 如何在 php 中使用大 txt 文件而不受内存限制或句柄错误(错误 500)
- ios - 快速自动更新?
- swift - 编辑 Core Data 类实例字符串时,SwiftUI List 中的 TextField 出现光标定位错误?