vue v-for 图片不显示。相反,它显示字符串

vue v-for image not showing. instead it shows string

我想在我的table中显示相应用户的图像。但是当我执行 v-for 时,它只在 table 中以字符串格式显示图像名称。我怎么能显示图像而不是文本本身?因为在 laravel blade 中我可以做一个 foreach 循环并直接显示图像。我应该怎么办?非常感谢

我的table

我的 axios 代码和 v-for

  <tr v-for="teacher in teachers" :key="teacher.id">
                            <td>{{teacher.id}}</td>
                            <td>{{teacher.image}}</td>
  </tr>


  methods:{
            getTeachers(){
                axios.get('getTeachers')
                    .then((res)=>{
                        this.teachers = res.data
                    })
                    .catch((e)=>{
                        console.log(e)
                    })
            }
        }

您正在尝试显示图片,因此,您应该使用:

<img v-bind:src="teacher.image" />

您需要将图像 url 包裹在适当的 HTML 标签内。

行中的内容:

<img :src="teacher.image">

执行此操作时,您将图像添加到 HTML 页面中,语法“:src”用于将 html 属性 'src' 与 vue 变量(在本例中为您的图片 link/name).

如果之后图像没有显示,您的 link 无效。查看图片url,看能不能直接从浏览器获取。如果服务器未在 url 处返回适当的图像,那么它将无法工作。使用 'alt' 属性设置文本而不是图像以查看是否发生这种情况。

问题在于您保存图片的方式。您在数据库中保存了唯一的图像名称,而不是路径。每当您通过 laravel 中的表单上传内容时。它将文件保存在 public/storage 中。

运行先命令

php artisan storage:link

这是您可以做的。提交表单时使用以下代码将图像保存在数据库中(我假设您正在系统中注册教师)

之后您的图像列将包含图像的总路径。

     if(!empty($request->file('image_file'))){
                $path = storage_path('public/teacher-images/');

                if(!File::isDirectory($path)){
                    File::makeDirectory($path, 0755, true, true);
                }
                $image_path = Storage::disk('public')->put('teacher-images', $request->file('image_file'));
                $teacher->image = isset($image_path) ?  "storage/".$image_path : "";
            }

之后,您可以通过附加 serverurl

使用该图片显示在您的模板上

您需要添加图片标签,然后提供图片的完整路径作为来源。例如:

<img :src="'/path/to/images/folder/'+teacher.image">

如果您正在使用 Laravel 的内置存储,我建议您应该 return 控制器中图像的完整路径,即使用 Storage::url() 获取完整的URL 图片。

您的服务器仅通过文件名找不到您的图片。所以我建议你从控制器传递你的图像 link 的完整路径。使用 asset() / Storage::url() .

这是个好方法。