Laravel使用Element UI的时候Message组件引用没有效果?

Vue版本2.5.17,Element Ui版本2.14.1,Laravel版本7.30.4

    "devDependencies": {
        ...
       "vue": "^2.5.17",
       "vue-template-compiler": "^2.6.10"
    },
    "dependencies": {
      "element-ui": "^2.14.1",
      ...
}

app.js已经引入Element UI

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
Vue.component('image-uploader', require('./components/ImageUploader').default);

前端模板文件如下

<div class="form-group row">
     <label for="product_images" class="col-lg-3 col-form-label"><span style="color: red;">*&nbsp;</span>产品图片</label>
     <div class="col-lg-9 inputBox">
           <image-uploader action-url="{{ route('upload_image') }}" token="{{ csrf_token() }}"></image-uploader>
     </div>
</div>

ImageUploader.vue文件使用Upload组件时

<template>
    <div>
        <el-upload
            name="product_image"
            list-type="picture-card"
            :limit="3"
            :headers="headers"
            :action="actionUrl"
            :before-upload="beforeImageUpload"
            :on-success="handleImageSuccess"
            :on-preview="handlePictureCardPreview"
            :on-remove="handleRemove">
            <i class="el-icon-plus"></i>
        </el-upload>
        <input type="hidden" name="product_images" :value="imageList">
        <el-dialog :visible.sync="dialogVisible">
            <img width="100%" :src="dialogImageUrl" alt="">
        </el-dialog>
    </div>
</template>

<style scoped>
.el-icon-plus {
    position: absolute;
    top: calc(50% - 14px);
    left: calc(50% - 14px);
}
</style>

<script>
export default {
    props: ['actionUrl', 'token'],
    data() {
        return {
            dialogImageUrl: '',
            dialogVisible: false,
            headers: { 'X-CSRF-TOKEN': this.token },
            imageList: [],
        };
    },
    methods: {
        handleRemove(file, fileList) {
            const value = file.response.product_image;
            this.imageList.splice(this.imageList.indexOf(value), 1);
        },
        handlePictureCardPreview(file) {
            this.dialogImageUrl = file.url;
            this.dialogVisible = true;
        },
        handleImageSuccess(res) {
            this.imageList.push(res.product_image);
        },
        beforeImageUpload(file) {
            const fileType = file.type.slice(0,5);
            const isImage = fileType === 'image';
            const isLt20M = file.size / 1024 / 1024 < 20;

            if (!isImage) {
                this.$message.error('上传文件只能是图片格式!');
            }
            if (!isLt20M) {
                this.$message.error('上传图片大小不能超过 20MB!');
            }
            return isImage && isLt20M;
        }
    }
}
</script>

问题:当我上传大于20M图片,或者非图片文件格式的时候,this.$message.error()并没有出现错误消息提示,通过console.log发现before-upload对应的beforeImageUpload方法确实已经调用了,但是Message组件好像没有调用成功,是哪里还需要单独引用吗?尝试在app.js单独import {Message}发现也没有用…

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

找到原因了,导航栏高度100px,有一个position: sticky属性,给了一个z-index: 99999,把错误提示盖住了...:joy:

1年前 评论
徵羽宫 1年前
讨论数量: 7

完整引入不用单独引用,可以打印下 this.$message

1年前 评论

找到原因了,导航栏高度100px,有一个position: sticky属性,给了一个z-index: 99999,把错误提示盖住了...:joy:

1年前 评论
徵羽宫 1年前

我很久没有写 Laravel 的视图文件了, 最近写的比较多的前端页面使用的是 vue 组合式写法。我是封装了一个下面的组件。

import { ElMessage  } from 'element-plus'

export const successMessage = (message) => {
    ElMessage({
        message,
        type: 'success',
    })
}

export const warningMessage = (message) => {
    ElMessage({
        message,
        type: 'warning',
    })
}

export const errorMessage = (message) => {
    ElMessage({
        message,
        type: 'error',
    })
}

export const infoMessage = (message) => {
    ElMessage({
        message,
        type: 'info',
    })
}

使用的时候直接像下面内样,就没有问题。

import * as message from './message'

message.errorMessage('出错啦!')
1年前 评论
ljheisenberg (楼主) 1年前
徵羽宫 (作者) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!