- git clone https://github.com/lcSuperman/vite-project.git
- pnpm install
- pnpm run dev
- 账号:lulingfeng 密码:QAZwsx123
下面是项目常遇到的问题以及解决办法:
app.use(router) //和大多数的 Vue 插件一样,use() 需要在 mount() 之前调用
app.mount('#app')
.use()要写在.mount()之前
< el-form >的表单ref的值不能和model的值一样
import { useRouter } from 'vue-router'; //先引入
const router = useRo // 获取router实例
router.push({path:'/home'})
模版中定义ref的值 'ruleFormRef' const ruleFormRef = ref() //定义的名字要和模版中ref的名称一致 ruleFormRef.value.XX() //使用
将Vue Router的模式切换成hash模式,在hash模式下,路由跳转回通过改变url的哈希值来实现,因此地址栏url会随着路由的改变而改变;
import { createWebHashHistory, createRouter } from 'vue-router'
const router = createRouter({
history: createWebHashHistory(),
routes,
})
- main.ts中设置监听:
window.addEventListener('popstate', function() {
history.pushState(null, null, document.URL)
})
- 在router的index.ts中
const router = createRouter({
history: createWebHashHistory(),
routes,
scrollBehavior: () => { //添加scrollBehavior函数
history.pushState(null, null, document.URL)
}
})
- 关闭菜单折叠动画 :collapse-transition="false"; .el-menu的width宽为100%;
- 给菜单父容器元素el-aside,添加过度动画 transition: width 0.1s ease-in-out;
- 此时菜单在展开时,会在边菜单栏下面闪一下横向滚动条,我们可以在.el-aside样式加上 overflow-x: hidden,隐藏掉,就不会闪现滚动条了
- 我们可以利用动态组件的形式取渲染,让icon以HTML标签形式渲染;
<el-icon v-if="item.icon">
<component :is="iconMapping[item.icon]" />
</el-icon>
- 单独创建一个公共的el-icon的ts映射文件,因为后端传过来的都是字符串,所以我们要取取对应的值;assets/el-icon.ts
import {Coin,DataAnalysis} from '@element-plus/icons-vue'
export default {
"coin": Coin,
"dataAnalysis": DataAnalysis,
}
<el-dropdown placement="bottom-end">
<div class="avatar">
<span>{{userName}}</span>
</div>
<template #dropdown>
...
</template>
</el-dropdown>
...
.avatar{
outline:none;
}
const clickScroll = (swidth:number) => {
try{
if (outdivRef.value) {
// 滚动固定宽度的像素值,例如100px
const scrollWidth = swidth;
// 获取当前滚动位置
let scrollLeft = outdivRef.value.scrollLeft;
//滚动到设置的滚动位置
outdivRef.value.scrollTo({
left: (scrollLeft + scrollWidth) % outdivRef.value.scrollWidth,
behavior: 'smooth'
});
}
}catch{}
}
那是因为在setup语法糖的< script >内就是js同步执行顺序,如果定义事件方法用的是es6语法中的let或const,并且写在watch()函数之后,事件方法的变量不会提醒,所以获取不到方法; 如果要用let或const定义事件方法,要写在watch()函数之前,或者用var去定义;
原因就是vue是异步的,刚添加进去的属性对象,还没有被页面挂载完毕,watch就已经监听到routeTabs的变化就直接执行啦,获取的是ref为xxx的之前的DOM元素; 可以通过nextTick()函数,等把页面加载完成后再去执行后面的逻辑;
watch(routeTabs, async (newValue, oldValue) => {
await nextTick()
await getShowOrHide() //如果要在watch中调用事件方法,要把watch写在方法之后因为const和let定义的书型盒方法不能提升
},
{ deep: true},
)