<li class="ct-li" v-for="list in checkdData" :style="{ fontSize: sliderValue + 'px' }"> <div class="ct-li-wrap"> <span>{{ list.index }} 、</span> <div class="ct-li-info"> <p>排号: <span>{{list.UserId}}</span> <span>{{processName(list.name) }}</span> <span v-if="list.States === '过号' " :key="list.index" :style="list.States === '过号' ? 'color: red;' : ''">(过号)</span> </p> <p>{{ list.Djlsh }}</p> </div> </div> </li><input type="text" placeholder=" 输入流水号回车" class="input-ct" v-model="inputDrValues" @keydown.enter="onEnters"/>mounted() { this.grilData(); this.manData(); setInterval(() => { this.grilData(); // 每5秒获取一次数据 this.manData(); }, 500000); },async onEnter(){ try{ const roomnumber = '03'; const djlsh = this.inputValue; const isExist = this.matchedData.some(data => data.Djlsh === djlsh); if(!isExist){ const url = getCt(); const CTData = await fetchCt(url, roomnumber,djlsh ); //排队完成 this.couter1++; this.matchedData.push(CTData); this.inputValue=''; }else{ console.log("该流水号输入过") } }catch(e){ console.log("排队失败"); } },async grilData(){ try{ const gender = '0'; const roomnumber = '03'; // const urls = getCtUrl(); // const CTDatas= await fetchLine(urls,roomnumber,gender); const response = await axios.get('/line.json'); //女生数据 const CTDatas = response.data; console.log("CTDatas",CTDatas); //让获得的数据按顺序来排 this.matchedData = CTDatas.data.list.filter(data => data.States !== "正在检").map((data, index) => { data.index = index +1 ; // this.couter1++; // 计数器递增 return data; }); this.matchedData.forEach(data => { if (data.States === '叫号') { console.log("叫号",data); this.startSpeech({...data, RoomNumber: roomnumber}); } }); }catch(e){ console.log("获取数据库信息失败"); } },processName(name) { if (name.length === 2) { return name[0] + '*'; } else if (name.length === 3) { return name[0] + '*' + name[2]; } else { return name; } },为什么会显示Uncaught (in promise) TypeError: name is undefined
时间: 2024-04-16 12:27:48 浏览: 182
根据你提供的代码,在`processName`方法中可能会抛出`Uncaught (in promise) TypeError: name is undefined`错误的原因是`name`参数未定义。可能是在某些情况下,传入的`name`参数为`undefined`。
为了解决这个问题,你可以在调用`processName`方法之前添加一个条件判断来检查`name`是否存在。如果`name`不存在,你可以返回一个空字符串或其他默认值。
下面是修改后的代码示例:
```javascript
processName(name) {
if (!name) {
return ''; // 或者返回其他默认值
}
if (name.length === 2) {
return name[0] + '*';
} else if (name.length === 3) {
return name[0] + '*' + name[2];
} else {
return name;
}
}
```
通过添加条件判断,当`name`不存在时,不再执行后续的操作,避免了抛出错误。这样修改后,你就不会再遇到`Uncaught (in promise) TypeError: name is undefined`错误了。
相关问题
<main-content :ifDetail="true"> <div class="two-side"> <div class="main-left"> <el-form :model="form" :rules="rules" ref="form" label-width="120px"> <el-form-item label="选择下载模块" prop="accountName"> <el-input v-model.trim="form.accountName" :maxlength="50"></el-input> </el-form-item> <el-form-item label="倾斜度"> <el-slider v-model.number="form.rotate" :min="-180" :max="180"></el-slider> </el-form-item> <el-form-item label="文字"> <el-input type="textarea" v-model="form.text"></el-input> </el-form-item> <el-form-item label="文字大小"> <el-input-number v-model.number="form.fontSize" :min="10" :max="50"></el-input-number> px </el-form-item> <el-form-item label="位置"> <el-select placeholder="请选择位置" v-model="form.alignment"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option> </el-select> </el-form-item> <el-form-item> <el-select v-if="form.alignment === 2" placeholder="请选择位置" v-model="form.textPosition"> <el-option v-for="item in textPositionOptions" :key="item.value" :label="item.label" :value="item.value" ></el-option> </el-select> </el-form-item> </el-form> {{ watermarkStyle }} </div> <div class="main-right" id="show"> <div class="watermark"> <span :style="watermarkStyle" ref="showText" style="word-break:break-all;display: inline-block">{{ form.text }}</span> </div> </div> </div> </main-content> 左边来控制右边div里水印展示,代码怎么写
您可以在 `<el-form>` 标签上绑定 `@input` 事件,当表单数据发生改变时,触发该事件,然后在事件处理函数中计算出水印的样式,并将样式绑定到 `<span>` 标签上。具体实现代码如下:
```
<template>
<main-content :ifDetail="true">
<div class="two-side">
<div class="main-left">
<el-form :model="form" :rules="rules" ref="form" label-width="120px" @input="handleInput">
<!-- 表单项省略 -->
</el-form>
</div>
<div class="main-right" id="show">
<div class="watermark">
<span :style="watermarkStyle" ref="showText" style="word-break:break-all;display: inline-block">{{ form.text }}</span>
</div>
</div>
</div>
</main-content>
</template>
<script>
export default {
data() {
return {
form: {
accountName: '',
rotate: 0,
text: '',
fontSize: 16,
alignment: 1,
textPosition: 1
},
options: [
{ label: '左上', value: 1 },
{ label: '居中', value: 2 },
{ label: '右下', value: 3 }
],
textPositionOptions: [
{ label: '正常', value: 1 },
{ label: '斜体', value: 2 }
]
}
},
computed: {
watermarkStyle() {
const { rotate, fontSize, alignment, textPosition } = this.form
const deg = rotate + (textPosition === 2 ? -45 : 0)
const translateX =
alignment === 1 ? '-10%' : alignment === 2 ? '-50%' : '90%'
const translateY =
alignment === 1 ? '-10%' : alignment === 2 ? '-50%' : '90%'
const transform = `rotate(${deg}deg)`
const style = {
position: 'absolute',
top: 0,
left: 0,
bottom: 0,
right: 0,
fontSize: `${fontSize}px`,
transform: transform,
'-webkit-transform': transform,
'-ms-transform': transform,
'-moz-transform': transform,
'-o-transform': transform,
opacity: '0.2',
'pointer-events': 'none',
'text-align': 'center',
'z-index': 9999,
transformOrigin: '50% 50%',
'-webkit-transform-origin': '50% 50%',
'-ms-transform-origin': '50% 50%',
'-moz-transform-origin': '50% 50%',
'-o-transform-origin': '50% 50%',
color: '#000',
'word-break': 'break-all',
'white-space': 'pre-wrap',
'max-height': '100%',
'max-width': '100%',
overflow: 'hidden',
'text-overflow': 'ellipsis',
'-webkit-text-fill-color': 'transparent',
'-webkit-background-clip': 'text',
'background-clip': 'text',
'-webkit-user-select': 'none',
'-moz-user-select': 'none',
'-ms-user-select': 'none',
userSelect: 'none',
'-webkit-line-clamp': '1',
display: 'flex',
'align-items': 'center',
'justify-content': 'center',
'transform-style': 'preserve-3d'
}
if (textPosition === 2) {
style.padding = '0.5rem'
style.background =
'linear-gradient(to right bottom, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 45%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0.2) 55%, rgba(255, 255, 255, 0.2) 100%)'
}
style.transform += ` translate(${translateX}, ${translateY})`
style['-webkit-transform'] += ` translate(${translateX}, ${translateY})`
style['-moz-transform'] += ` translate(${translateX}, ${translateY})`
style['-ms-transform'] += ` translate(${translateX}, ${translateY})`
style['-o-transform'] += ` translate(${translateX}, ${translateY})`
return style
}
},
methods: {
handleInput() {
this.$nextTick(() => {
const { width, height } = this.$refs.show.getBoundingClientRect()
const { offsetWidth, offsetHeight } = this.$refs.showText
if (width === 0 || height === 0 || offsetWidth === 0 || offsetHeight === 0) {
return
}
const scaleX = width / offsetWidth
const scaleY = height / offsetHeight
const scale = Math.min(scaleX, scaleY)
this.$refs.showText.style.transform += `scale(${scale})`
this.$refs.showText.style['-webkit-transform'] += `scale(${scale})`
this.$refs.showText.style['-moz-transform'] += `scale(${scale})`
this.$refs.showText.style['-ms-transform'] += `scale(${scale})`
this.$refs.showText.style['-o-transform'] += `scale(${scale})`
})
}
}
}
</script>
```
代码中的 `watermarkStyle` 计算属性用于计算水印的样式,`handleInput` 方法用于在计算出水印样式后,将水印按照比例缩小并居中显示。注意,为了保证水印样式的正确性,需要在表单项加载完成之后计算水印样式,因此需要在 `handleInput` 方法中使用 `$nextTick` 方法等待表单项加载完成再进行计算。
<!-- 点击筛选从底部弹出 --> <tui-drawer :mode="'bottom'" :visible="bottomDrawer" @close="closeDrawer"> <view class="d-container both"> <view class="drawer-title"> <view></view> <view style="font-weight: bold;">全部筛选</view> <gs-icon-text class="icon" icon="icon-chacha1" color="#535d73" fontSize="1.5em" @click="closeDrawer"></gs-icon-text> </view> <view> <gs-title title="办学性质" fontSize="30rpx"></gs-title> <view class="flex mb20 mt20" style="justify-content: space-between;"> <view class="education">公办</view> <view class="education">民办</view> </view> <gs-title class="mb20" title="等级" fontSize="30rpx"></gs-title> <view class="level" v-for="(item, index) in level" :key="index">{{ item }}</view> <gs-title class="mb35 mt35" title="类别" fontSize="30rpx"></gs-title> <view class="category" v-for="(item, index) in category" :key="index">{{ item }}</view> <view class="designatedMajors flex"> <gs-title class="mb35 mt35" title="单招专业" fontSize="30rpx"></gs-title> <gs-icon-text v-show="appoint != '指定专业'" icon="icon-right" fontSize="12px" color="#b6baca" iconPos="right" @click="designatedMajors">切换专业</gs-icon-text> </view> <view class="appoint" :class="{active:appoint != '指定专业'}" @click="designatedMajors">{{ appoint }}</view> <gs-title class="mb35 mt35" title="双高院校" fontSize="30rpx"></gs-title> <view style="margin-bottom: 150rpx;"> <view class="doubleheight" v-for="(item, index) in doubleheight" :key="index">{{ item.name }} <view>{{ item.level }}</view> </view> </view> </view> </view> <view class="tabbar"> <view class="resetting">重置</view> <view class="complete" @click="closeDrawer">完成</view> </view> </tui-drawer>onLoad((option) => { if (option.name) { bottomDrawer.value = true uni.pageScrollTo({ scrollTop:800 }) appoint.value = option.name } })如何在option.name为true的情况下让筛选滚动至单招专业上去
你可以在 `onLoad` 函数中添加一个条件判断,当 `option.name` 为 true 时,使用 `uni.nextTick` 函数在下一次 DOM 更新之后,调用 `uni.pageScrollTo` 函数将页面滚动至指定位置。具体代码如下:
```javascript
onLoad((option) => {
if (option.name) {
bottomDrawer.value = true
if (appoint.value !== option.name) {
appoint.value = option.name
uni.nextTick(() => {
uni.pageScrollTo({
scrollTop: 800
})
})
}
}
})
```
在上述代码中,使用 `if (appoint.value !== option.name)` 条件判断是为了避免重复调用 `uni.pageScrollTo` 函数,提高性能。
阅读全文
相关推荐

















