以下是将您提供的 Vue 2 代码改写为 Vue 3 的版本。主要变化包括使用 setup
函数、ref
来声明响应式数据以及适应 Vue Router 和 Vuex 相关API的变化。
<template>
<div class="header">
<div class="open">
<span v-if="isCollapse" class="iconfont icon-zhankaicebianlan" @click="chengMenu"></span>
<span v-else class="iconfont icon-shouqicebianlan" @click="chengMenu"></span>
</div>
<div class="right">
<el-dropdown>
<el-avatar :src="circleUrl"></el-avatar>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>修改用户名</el-dropdown-item>
<el-dropdown-item>修改密码</el-dropdown-item>
<el-dropdown-item>退出登录</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div>
</template>
<script setup lang="js">
import { ref, computed } from 'vue';
import { useStore } from 'vuex';
// 响应式数据
const store = useStore();
const circleUrl = "https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png";
// 从 Vuex 获取 isCollapse 状态
const isCollapse = computed(() => store.state.isCollapse);
// 方法
function chengMenu() {
store.commit('changeMenuShow');
}
</script>
<style lang="less" scoped>
.header {
width: 100%;
height: 50px;
background-color: #1a78bf;
color: #fff;
line-height: 50px;
display: flex;
align-items: center;
justify-content: space-between;
.open {
font-size: 20px;
margin-left: 10px;
.iconfont {
cursor: pointer;
}
}
.right {
margin-right: 15px;
display: flex;
align-items: center;
line-height: 0;
.el-avatar {
cursor: pointer;
}
}
}
</style>
改动说明:
- 脚本部分:使用
setup
函数来定义组件,利用ref
和computed
来处理状态和计算属性。 - Vuex:通过
useStore()
引入了 Vuex,获取状态和提交变更。 - 模板中的属性:直接使用响应式数据,无需在
data()
中定义。
以上就是将原有代码转换为 Vue 3 风格的示例!如果有其他问题,请随时告诉我!
内容由零声教学AI助手提供,问题来源于学员提问