【错误记录】【vue3.js】在vue3中的消息提示框无法正常显示,改写为vue2的写法

本文介绍了一种在Vue3项目中使用Element UI Plus样式的方法,通过采用Vue2的写法解决了样式不生效的问题,并提供了代码示例。

问题提出

这个是官网(elementUI plus官网)上的样式:
在这里插入图片描述
在引入到自己的代码程序中,我也希望用这样的样式,但是却没有任何的反应

解决办法

我并没有找到vue3的写法,但是通过vue2的写法能够显示出来:

下面就是我找到的能够显示出来的方法()
写在方法中
运行结果就是(成功按钮改为了vue2的写法,警告按钮还是原来的官网上的写法,然后能够通过界面进行展示成功按钮,警告按钮无任何效果):
结果


后记

将写法改为vue2的写法能够快速解决问题,但是vue3应该怎么来写,这个等后面研究了再来写,但是我找到了一篇别人的文章:
https://blog.youkuaiyun.com/qq_40185480/article/details/110926273
希望对于那些希望尽快知道的朋友提供帮助

附:

我的页面的html代码程序(需要几个js文件和css,在我分享的资源下载里面能够找得到,免费下载的(本来人家官网也有)):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登陆</title>
  <script src="axios.min.js"></script>
  <script src="vue3.js"></script>
  <!--      加载样式     在css样式中  它明确定义了fonts的路径  和该文件同文件夹下-->
  <link rel="stylesheet" href="elementUI/index.css">

  <script src="elementUI/index.full.js"></script>

    <style>
        #box{
            /*border: 1px  solid  red ;*/
            margin: 200px auto;
            width: 400px;
            height: 300px;
        }
        #app{
            /*background: url("images/鬼刀2.jpg") no-repeat;*/
            background: url("images/海边,少女.jpg") no-repeat ;
            background-size: cover;
        /*    size的cover是保持图像的宽高比例,将图片缩放到正好完全覆盖定义的背景区域,其中有一边和背景相同*/
        /*    size的contain是保存图像的狂爱比例 将图片缩放到宽或者高正好适应定义背景的区域,但背景仍在定义的区域之内,被包含*/
        }
    </style>

</head>
<body id="app">
    <div id="box">
        <el-card class="box-card">


        <h3 >登 录</h3>
        <el-divider></el-divider>

            <el-form  status-icon  ref="ruleForm" label-width="100px" class="demo-ruleForm">
                <el-form-item label="账户" prop="">
                    <el-input type="text" v-model="loginForm.username" autocomplete="off"></el-input>
                </el-form-item>
                <el-form-item label="密码" >
                    <el-input type="password" v-model="loginForm.password" autocomplete="off"></el-input>
                </el-form-item>

                <el-form-item>
                    <el-link type="primary" style="margin-right: 20px">注册</el-link>
                    <el-link type="primary">忘记密码?</el-link>
                    <el-button  type="primary" style="float:right;margin-right: 20px" @click="login">登录</el-button>
                    <el-button :plain="true" @click="open1">成功</el-button>
                    <el-button :plain="true" @click="open3">警告</el-button>
                </el-form-item>
            </el-form>
        </el-card>
    </div>

<script>
    // import { defineComponent } from 'vue3'
    // import { ElMessage } from 'element-plus'

  var data = {
    data(){
        return{
            loginForm:{
                username:"",
                password:"",
            },

        }

    },
    created(){

    },
    methods:{
        open1() {
            this.$message.success({
                message: '恭喜你,这是一条成功消息',
                type: 'success'
            });
        },
        open3() {
            ElMessage({
                showClose: true,
                message: '警告哦,这是一条警告消息',
                type: 'warning'
            });
        },

        login(){
            ElMessage.success({
                message: '恭喜你,这是一条成功消息',
                type: 'success'
            });

            console.log(this.loginForm);
            // alert("提交信息");
            //发送数据请求到后端去
            // axios.post("/login",this.loginForm).then(res=>{
                // alert(res.data);
                // this.$message.success({


        //     })
        }

    }

  };
  const app = Vue.createApp(data);
  // elementui 的plus版本  需要加上 下面这一句话,
  app.use(ElementPlus);
  app.mount("#app");


</script>

</body>
</html>
将小程序中的 **Vue 2 项目升级为 Vue 3**,尤其是在使用 `uni-app` 开发时,是一个涉及框架版本、插件兼容性、语法变更和构建工具配置的系统性工程。 下面我将从 **实际操作步骤 + 注意事项 + 示例代码 + 常见问题解决** 四个维度,详细讲解如何在 **uni-app 小程序项目中完成 Vue 2Vue 3 的迁移**。 --- ## ✅ 一、前提条件:你是否适合升级到 Vue 3? | 条件 | 是否满足 | |------|----------| | 使用的是 `uni-app` 或 `HBuilderX` 构建的小程序 | ✅ 是(推荐) | | 当前使用 Vue 2(如 `new Vue()`) | ✅ | | UI 框架是 uView 1.x / uni-ui 等老版本 | ❌ 需要更换或升级 | | 项目依赖了大量仅支持 Vue 2 的第三方库 | ❌ 需评估替换 | > 📌 **结论**:如果你使用的是官方推荐的技术栈,并且不重度依赖 Vue 2 插件,就可以安全升级。 --- ## 🔧 二、升级步骤详解 ### 步骤 1:修改 `manifest.json` 启用 Vue 3 编译模式 在项目根目录找到或创建文件: ``` unpackage/manifest.json ``` 添加以下配置: ```json { "vueVersion": "3" } ``` 完整示例: ```json { "name": "my-uniapp", "appid": "", "description": "", "versionName": "1.0.0", "versionCode": "100", "transformPx": false, "vueVersion": "3" // 👈 关键:启用 Vue 3 } ``` > 💡 这是 uni-app 启用 Vue 3 的核心开关! --- ### 步骤 2:检查并更新 `package.json` 中的依赖 确保你的依赖支持 Vue 3: ```json { "dependencies": { "vue": "^3.4.0", // 必须是 Vue 3 "vuex": "^4.1.0", // Vue 3 对应 Vuex 4 "vue-router": "^4.3.0" // Vue 3 对应 Vue Router 4 }, "devDependencies": { "@dcloudio/uni-mp-vue": "^3.0.0" // 确保编译器支持 Vue 3 } } ``` 执行更新命令: ```bash npm install vue@^3.4 vuex@^4.1 vue-router@^4.3 --save ``` > ⚠️ 注意:不要混用 Vue 2Vue 3 的包! --- ### 步骤 3:修改 `main.js` 入口文件(关键改动) #### ❌ 原来的 Vue 2 写法: ```js import Vue from &#39;vue&#39; import App from &#39;./App&#39; Vue.config.productionTip = false App.mpType = &#39;app&#39; const app = new Vue({ ...App }) app.$mount() ``` #### ✅ 改为 Vue 3 写法: ```js import { createApp } from &#39;vue&#39; import App from &#39;./App&#39; const app = createApp(App) // uni-app 特有标识 App.mpType = &#39;app&#39; // 挂载应用 app.mount() ``` 📌 注意: - 不再使用 `new Vue()` - 使用 `createApp(App).mount()` - `Vue.config.productionTip` 已移除(Vue 3 默认关闭提示) --- ### 步骤 4:替换不兼容的 UI 框架(如 uView) #### ❌ uView 1.x 不支持 Vue 3! | UI 库名 | 是否支持 Vue 3 | 替代方案 | |--------|----------------|---------| | `uview-ui` (1.x) | ❌ | 升级到 `uview-plus` | | `uni-ui` | ⚠️ 部分组件支持 | 查看文档确认 | | `nutui-uniapp` | ✅ | 支持 Vue 3 | | `varlet` | ✅ | 跨端 Vue 3 组件库 | #### ✅ 安装支持 Vue 3 的 uView Plus ```bash npm install uview-plus --save ``` 然后在 `main.js` 中注册: ```js import uView from &#39;uview-plus&#39; app.use(uView) ``` --- ### 步骤 5:更新组件写法(可选但推荐) Vue 3 推荐使用 `<script setup>` 语法糖提升开发效率。 #### ✅ 示例:旧式写法 → 新式写法 ##### ❌ Vue 2 写法(Options API) ```vue <template> <view class="content"> {{ message }} </view> </template> <script> export default { data() { return { message: &#39;Hello Vue 2&#39; } }, onLoad() { console.log(&#39;页面加载&#39;) } } </script> ``` ##### ✅ Vue 3 写法(Composition API + script setup) ```vue <template> <view class="content"> {{ message }} </view> </template> <script setup> import { ref, onMounted } from &#39;vue&#39; const message = ref(&#39;Hello Vue 3&#39;) onMounted(() => { console.log(&#39;页面加载&#39;) }) </script> ``` > ✅ 更简洁、更高效、更适合逻辑复用。 --- ### 步骤 6:检查其他插件是否兼容 Vue 3 比如你用了自定义插件: ```js // http.interceptor.js export default { install: (Vue) => { // ❌ 这里传的是 Vue 构造函数(Vue 2) // ... } } ``` 需要改为接收 `app` 实例(Vue 3): ```js // http.interceptor.js export default { install: (app) => { // ✅ Vue 3 中 app 是应用实例 uni.addInterceptor(&#39;request&#39;, { invoke(args) { args.header = { ...args.header, &#39;Authorization&#39;: uni.getStorageSync(&#39;token&#39;) } } }) } } ``` 并在 `main.js` 中通过 `app.use()` 注册: ```js import httpInterceptor from &#39;@/common/http.interceptor.js&#39; app.use(httpInterceptor) ``` --- ## 🧪 三、验证是否成功切换到 Vue 3 在 `main.js` 添加调试信息: ```js import { createApp } from &#39;vue&#39; console.log(&#39;Vue version:&#39;, createApp.toString().includes(&#39;runtime&#39;)) // 可间接判断 ``` 或者更直接地: ```js import Vue from &#39;vue&#39; console.log(Vue.version) // 输出 3.x.x 表示成功 ``` > ⚠️ 如果报错 `Vue is not a constructor`,说明你不能再用 `new Vue()`,必须改用 `createApp` --- ## ⚠️ 四、常见问题与解决方案 | 问题 | 原因 | 解决办法 | |------|------|-----------| | `createApp is not a function` | 实际加载的是 Vue 2 | 检查 `manifest.json` 是否设置了 `"vueVersion": "3"` | | 样式错乱 / 组件不渲染 | uView 1.x 不兼容 Vue 3 | 升级为 `uview-plus` | | `$refs` 获取不到组件 | ref 在 `<script setup>` 中需显式暴露 | 使用 `defineExpose` | | `this.$u` 报错 | uView 的全局属性未正确挂载 | 检查 `app.use(uView)` 是否执行 | | HBuilderX 编译失败 | 缓存未清理 | 删除 `unpackage` 文件夹重新运行 | --- ## ✅ 五、最终 `main.js` 示例(Vue 3 + uni-app + uView Plus) ```js // main.js import { createApp } from &#39;vue&#39; import App from &#39;./App&#39; // 创建应用 const app = createApp(App) // 设置 mpType(uni-app 要求) App.mpType = &#39;app&#39; // 使用 uView Plus(Vue 3 兼容版) import uView from &#39;uview-plus&#39; app.use(uView) // 自定义插件:HTTP 拦截器 import httpInterceptor from &#39;@/common/http.interceptor.js&#39; app.use(httpInterceptor) // API 接口管理 import httpApi from &#39;@/common/http.api.js&#39; app.use(httpApi) // 挂载应用 app.mount() ``` --- ## 📊 六、Vue 2 vs Vue 3 在小程序中的对比 | 特性 | Vue 2 | Vue 3 | |------|------|-------| | 入口写法 | `new Vue()` | `createApp().mount()` | | 响应式原理 | Object.defineProperty | Proxy | | 性能 | 一般 | 更快,更小 | | Composition API | ❌ 需插件 | ✅ 原生支持 | | 生态兼容性 | 广泛 | 正在完善 | | 推荐程度 | 维护中 | ✅ 新项目首选 | --- ## ✅ 总结:如何将小程序从 Vue 2 升级到 Vue 3? 1. ✅ 修改 `manifest.json` 设置 `"vueVersion": "3"` 2. ✅ 更新 `package.json` 使用 Vue 3 相关依赖 3.改写 `main.js` 使用 `createApp` 4. ✅ 替换不兼容 UI 框架(如 uView → uview-plus) 5. ✅ 更新插件写法,使用 `app.use(plugin)` 6. ✅ 推荐使用 `<script setup>` 提升开发体验 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿,葱来了-C is coming

老板大气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值